[llvm-bugs] [Bug 31025] New: deleted move constructor ignored by return statement
via llvm-bugs
llvm-bugs at lists.llvm.org
Tue Nov 15 10:45:08 PST 2016
https://llvm.org/bugs/show_bug.cgi?id=31025
Bug ID: 31025
Summary: deleted move constructor ignored by return statement
Product: clang
Version: trunk
Hardware: All
OS: All
Status: NEW
Severity: normal
Priority: P
Component: C++11
Assignee: unassignedclangbugs at nondot.org
Reporter: cubbimew at gmail.com
CC: dgregor at apple.com, llvm-bugs at lists.llvm.org
Classification: Unclassified
When returning a class lvalue with deleted move constructor, first phase of the
return statement's overload resolution selects that deleted move constructor
and results in an error in GCC, Intel, and MSVC. Clang, however, silently falls
through to the second phase overload resolution (and selects the copy ctor if
available):
struct B
{
B() {};
B(const B &) {};
B(B &&) = delete;
};
B bar() {
B b;
return b; // OK in Clang, Error in GCC, Intel, MSVC
}
The relevant standardese is [class.copy]/32 "If the first overload resolution
fails ... " and it appears clang disagrees with others w.r.t. what it means for
overload resolution to "fail" in this context.
--
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20161115/eb9155fc/attachment.html>
More information about the llvm-bugs
mailing list