blob: 8176a6e187800143da8c4b05cc008787d614ca12 [file] [log] [blame]
// 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<D&&>(d1));
d1 = static_cast<D&&>(d2);
E e1;
E e2 (static_cast<E&&>(e1));
e1 = static_cast<E&&>(e2);
return m != 12;
}