[LLVMbugs] [Bug 11528] New: -Wbind-to-temporary warns if field in class has a type with a non-const copy constructor.
bugzilla-daemon at llvm.org
bugzilla-daemon at llvm.org
Fri Dec 9 15:21:03 PST 2011
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: unassignedclangbugs at nondot.org
ReportedBy: ajwong at chromium.org
CC: dgregor at apple.com, llvmbugs at cs.uiuc.edu
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.
More information about the llvm-bugs
mailing list