http://llvm.org/bugs/show_bug.cgi?id=11528

             Bug #: 11528
           Summary: -Wbind-to-temporary warns if field in class has a type
                    with a non-const copy constructor.
           Product: clang
           Version: trunk
          Platform: PC
        OS/Version: MacOS X
            Status: NEW
          Severity: normal
          Priority: P
         Component: C++
        AssignedTo: [email protected]
        ReportedBy: [email protected]
                CC: [email protected], [email protected]
    Classification: Unclassified


struct A {
  A();

private:
 A(A& other) {}
};

class B {
  A field_;
};

void Func(const B& t) {}

int main(void) {
  Func(B());
  return 0;
}

This triggers -Wbind-to-temporary-copy:

$ ./third_party/llvm-build/Release+Asserts/bin/clang++ -c /tmp/bad3.cc
/tmp/bad3.cc:15:8: warning: no viable constructor copying parameter of type
'B'; C++98 requires a copy constructor when binding a reference to a temporary
[-Wbind-to-temporary-copy]
  Func(B());
       ^~~
/tmp/bad3.cc:8:7: note: candidate constructor (the implicit copy constructor)
not viable: no known conversion from 'B' to 'B &' for 1st argument;
class B {
      ^

If A's copy constructor is defined using a const-reference as in A(const A&
other) {}, the warning does not fire.

I *think* the warning should still not fire even if A's copy constructor is
non-const because B's implicit copy constructor should still be public.  If the
warning is actually accurate, then we have a separate problem where the
diagnostic is very confusing since it talks about B converting to B&.

-- 
Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.
_______________________________________________
LLVMbugs mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/llvmbugs

Reply via email to