http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54506
--- Comment #4 from Jonathan Wakely <redi at gcc dot gnu.org> 2012-09-09 21:36:40 UTC --- The example can be simplified to struct A { A() {} A(A &&) = delete; A &operator =(A &&) = delete; }; struct B { A a; B() = default; }; int main() { B b = B(); b = B(); } I think this is ill-formed, so G++ is right to reject it. struct A cannot be moved because its move operations are deleted, and cannot be copied because the implicit-declared copy operations are defined as deleted, see [class.copy]/7. Therefore struct B cannot be moved or copied either.