Overload resolution is picking the wrong candidate for the construction of b3, below:
base2 b3(static_cast<base2&&>(b)); Instead of choosing the move constructor, it is picking the trivial copy constructor. However, adding a normal copy constructor fixes the problem. Naturally, this only occurs in C++0x mode. -- Summary: C++0x overloading problem with move constructor and trivial copy constructor Product: gcc Version: 4.3.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: dgregor at gcc dot gnu dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33235