http://llvm.org/bugs/show_bug.cgi?id=10945
Douglas Gregor <[email protected]> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED Resolution| |INVALID --- Comment #9 from Douglas Gregor <[email protected]> 2011-10-10 14:15:50 CDT --- (In reply to comment #6) > From the cfe-dev thread, I think this is by design. > > shared_ptr defines a move constructor (t.cc:22083) but relies on a constructor > template (immediately above, t.cc:22079) for copy construction. The letter of > the law (12.8p7) says: > > "If the class definition declares a move constructor or move assignment > operator, the implicitly declared copy constructor is defined as deleted; > otherwise, it is defined as defaulted" > > Without this clause I'm not entirely sure what should've happened - I suppose > the default copy ctor should've been implicitly provided (from my cursory > glance of the code it seems like the default would've been correct/sufficient) > and the constructor template that looks like it could do copy would've been > ignored. > > With this clause that no longer works, the copy ctor is marked as deleted and > fails to compile. > > A simpler example is this: > > struct foo { > void operator=(foo&&); > } g((foo())); > > Which compiles without error in g++ but fails in clang++. So far as I'm > reading > the spec, clang is correct and GCC is incorrect. Yes, this is correct. GCC 4.6.1 doesn't implement this clause yet, because it came into C++11 relatively late. Closing this as "invalid": it's a GCC and Boost bug, not a Clang bug. There is a little more information here http://clang.llvm.org/compatibility.html#deleted-special-func -- 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
