// Basic runtime test for implicit move constructor // { dg-do run { target c++11 } } int m; struct A { A() = default; A(A&&) { ++m; } A& operator=(A&&) { ++m; return *this; } }; struct B { B() = default; B(const B&); B(B&&) { ++m; } B& operator=(const B&); B& operator=(B&&) { ++m; return *this; } }; struct C { C() = default; C(C&); C(C&&) { ++m; } C& operator=(C&); C& operator=(C&&) { ++m; return *this; } }; struct D: public A, public B { C c; int i; }; struct E: public A, public B { C c; int i; E() = default; E(E&&) = default; E& operator=(E&&) = default; }; int main() { D d1; D d2 (static_cast(d1)); d1 = static_cast(d2); E e1; E e2 (static_cast(e1)); e1 = static_cast(e2); return m != 12; }