public inbox for gcc-bugs@sourceware.org help / color / mirror / Atom feed
From: "m.cencora at gmail dot com" <gcc-bugzilla@gcc.gnu.org> To: gcc-bugs@gcc.gnu.org Subject: [Bug c++/113064] New: assignement from temporary sometimes invokes copy-assign instead of move-assign operator Date: Mon, 18 Dec 2023 12:04:36 +0000 [thread overview] Message-ID: <bug-113064-4@http.gcc.gnu.org/bugzilla/> (raw) https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113064 Bug ID: 113064 Summary: assignement from temporary sometimes invokes copy-assign instead of move-assign operator Product: gcc Version: 13.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: m.cencora at gmail dot com Target Milestone: --- Following code fails to compile on any gcc version with any selected language version. Works with clang. When invoking the conversion operator the problem does not occur. Also the mere existence of second overloaded conversion operator is problematic. Even though this conversion operator does not participate in overload resolution due to being && qualified. I marked it as deleted to show that this is not the overload being chosen by compiler but just declaring it normally is enough to trigger the bug. Compilation fails with error: <source>: In function 'void test()': <source>:31:10: error: use of deleted function 'no_copy& no_copy::operator=(const no_copy&)' 31 | nc = f; | ^ <source>:9:14: note: declared here 9 | no_copy& operator=(const no_copy&) = delete; | ^~~~~~~~ Compiler returned: 1 // test.cpp struct no_copy { no_copy() = default; no_copy(const no_copy&) = delete; no_copy(no_copy&&); no_copy& operator=(const no_copy&) = delete; no_copy& operator=(no_copy&&); }; struct foo { operator no_copy() & { return no_copy(); } #ifndef WORKAROUND1 operator no_copy&&() && = delete; #endif }; void test() { foo f; no_copy nc; #ifndef WORKAROUND2 nc = f; #else nc = f.operator bar(); #endif }
next reply other threads:[~2023-12-18 12:04 UTC|newest] Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top 2023-12-18 12:04 m.cencora at gmail dot com [this message] 2023-12-18 12:41 ` [Bug c++/113064] " m.cencora at gmail dot com 2023-12-18 13:00 ` m.cencora at gmail dot com 2023-12-18 19:58 ` mpolacek at gcc dot gnu.org 2023-12-19 9:10 ` m.cencora at gmail dot com 2023-12-19 11:39 ` m.cencora at gmail dot com 2023-12-19 15:54 ` mpolacek at gcc dot gnu.org 2024-01-03 20:43 ` cvs-commit at gcc dot gnu.org 2024-01-03 22:35 ` ppalka at gcc dot gnu.org 2024-01-03 22:36 ` ppalka at gcc dot gnu.org 2024-01-03 22:50 ` ppalka at gcc dot gnu.org 2024-01-04 8:24 ` m.cencora at gmail dot com
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=bug-113064-4@http.gcc.gnu.org/bugzilla/ \ --to=gcc-bugzilla@gcc.gnu.org \ --cc=gcc-bugs@gcc.gnu.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
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).