[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