public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c++/62227] New: Templated move not elided
@ 2014-08-22 11:37 roman.perepelitsa at gmail dot com
2014-08-23 23:12 ` [Bug c++/62227] " redi at gcc dot gnu.org
` (3 more replies)
0 siblings, 4 replies; 5+ messages in thread
From: roman.perepelitsa at gmail dot com @ 2014-08-22 11:37 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62227
Bug ID: 62227
Summary: Templated move not elided
Product: gcc
Version: 4.8.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: roman.perepelitsa at gmail dot com
#include <stdio.h>
struct S {
S(int) {}
S(const S&) = default; // (1)
template <class = void> // (2)
S(S&& other) {
puts("move");
}
};
int main() {
S s = 42;
(void)s;
}
This program unexpectedly prints "move". The expected output is empty (move is
elided).
The program prints nothing (as expected) if any of the following is done:
- Line (1) is removed.
- Line (2) is removed.
- The program is compiled with clang.
^ permalink raw reply [flat|nested] 5+ messages in thread
* [Bug c++/62227] Templated move not elided
2014-08-22 11:37 [Bug c++/62227] New: Templated move not elided roman.perepelitsa at gmail dot com
@ 2014-08-23 23:12 ` redi at gcc dot gnu.org
2014-08-24 23:20 ` redi at gcc dot gnu.org
` (2 subsequent siblings)
3 siblings, 0 replies; 5+ messages in thread
From: redi at gcc dot gnu.org @ 2014-08-23 23:12 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62227
--- Comment #1 from Jonathan Wakely <redi at gcc dot gnu.org> ---
A template cannot be a move constructor and so it is not legal to elide it.
Removing line (1) means there is a move constructor implicitly declared, which
will be used and can be elided.
Removing line (2) means there is a move constructor, which will be used and
elided.
^ permalink raw reply [flat|nested] 5+ messages in thread
* [Bug c++/62227] Templated move not elided
2014-08-22 11:37 [Bug c++/62227] New: Templated move not elided roman.perepelitsa at gmail dot com
2014-08-23 23:12 ` [Bug c++/62227] " redi at gcc dot gnu.org
@ 2014-08-24 23:20 ` redi at gcc dot gnu.org
2014-08-24 23:24 ` redi at gcc dot gnu.org
2021-08-23 0:28 ` [Bug c++/62227] [DR535] " pinskia at gcc dot gnu.org
3 siblings, 0 replies; 5+ messages in thread
From: redi at gcc dot gnu.org @ 2014-08-24 23:20 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62227
Jonathan Wakely <redi at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Severity|normal |enhancement
--- Comment #3 from Jonathan Wakely <redi at gcc dot gnu.org> ---
C++11 says "When certain criteria are met, an implementation is allowed to omit
the copy/move construction of a class object, even if the copy/move
constructor..." which only applies to copy constructors or move constructors.
But the current draft says "even if the constructor selected for the copy/move
operation"
So it does seem that elision is now allowed when the relevant constructor is a
template.
^ permalink raw reply [flat|nested] 5+ messages in thread
* [Bug c++/62227] Templated move not elided
2014-08-22 11:37 [Bug c++/62227] New: Templated move not elided roman.perepelitsa at gmail dot com
2014-08-23 23:12 ` [Bug c++/62227] " redi at gcc dot gnu.org
2014-08-24 23:20 ` redi at gcc dot gnu.org
@ 2014-08-24 23:24 ` redi at gcc dot gnu.org
2021-08-23 0:28 ` [Bug c++/62227] [DR535] " pinskia at gcc dot gnu.org
3 siblings, 0 replies; 5+ messages in thread
From: redi at gcc dot gnu.org @ 2014-08-24 23:24 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62227
--- Comment #4 from Jonathan Wakely <redi at gcc dot gnu.org> ---
http://open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#535 changed that
wording
^ permalink raw reply [flat|nested] 5+ messages in thread
* [Bug c++/62227] [DR535] Templated move not elided
2014-08-22 11:37 [Bug c++/62227] New: Templated move not elided roman.perepelitsa at gmail dot com
` (2 preceding siblings ...)
2014-08-24 23:24 ` redi at gcc dot gnu.org
@ 2021-08-23 0:28 ` pinskia at gcc dot gnu.org
3 siblings, 0 replies; 5+ messages in thread
From: pinskia at gcc dot gnu.org @ 2021-08-23 0:28 UTC (permalink / raw)
To: gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=62227
--- Comment #5 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
C++17 and C++20 modes no longer print move since GCC 7.
Most likely due to the patches to implement p0135.
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/p0135r1.html
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2021-08-23 0:28 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-08-22 11:37 [Bug c++/62227] New: Templated move not elided roman.perepelitsa at gmail dot com
2014-08-23 23:12 ` [Bug c++/62227] " redi at gcc dot gnu.org
2014-08-24 23:20 ` redi at gcc dot gnu.org
2014-08-24 23:24 ` redi at gcc dot gnu.org
2021-08-23 0:28 ` [Bug c++/62227] [DR535] " pinskia at gcc dot gnu.org
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).