#include <stdio.h>
#include <stdlib.h>
class Test
{
public:
int a;
Test()
{
puts("Test()\r\n");
}
explicit Test(int)
{
puts("Test(int)\r\n");
}
Test(const Test&)
{
puts("Test(const Test&)\r\n");
}
Test& operator = (const Test&)
{
puts("Test::operator = (const Test&)\r\n");
return *this;
}
Test(Test&&)
{
puts("Test(Test&&)\r\n");
}
Test& operator = (Test&&)
{
puts("Test::operator = (Test&&)\r\n");
return *this;
}
};
Test GetTest()
{
return Test(rand());
}
int main()
{
Test t;
Test t1(t);
Test t2 = t;
Test t3(GetTest());
Test t4 = Test();
Test t5 = Test(t);
t1 = t;
t2 = Test();
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCmNsYXNzIFRlc3QKewpwdWJsaWM6CgoJaW50IGE7CgoJVGVzdCgpCgl7CgkJcHV0cygiVGVzdCgpXHJcbiIpOwoJfQoKCWV4cGxpY2l0IFRlc3QoaW50KQoJewoJCXB1dHMoIlRlc3QoaW50KVxyXG4iKTsKCX0KCglUZXN0KGNvbnN0IFRlc3QmKQoJewoJCXB1dHMoIlRlc3QoY29uc3QgVGVzdCYpXHJcbiIpOwoJfQoKCVRlc3QmIG9wZXJhdG9yID0gKGNvbnN0IFRlc3QmKQoJewoJCXB1dHMoIlRlc3Q6Om9wZXJhdG9yID0gKGNvbnN0IFRlc3QmKVxyXG4iKTsKCQlyZXR1cm4gKnRoaXM7Cgl9CgoJVGVzdChUZXN0JiYpCgl7CgkJcHV0cygiVGVzdChUZXN0JiYpXHJcbiIpOwoJfQoKCVRlc3QmIG9wZXJhdG9yID0gKFRlc3QmJikKCXsKCQlwdXRzKCJUZXN0OjpvcGVyYXRvciA9IChUZXN0JiYpXHJcbiIpOwoJCXJldHVybiAqdGhpczsKCX0KfTsKClRlc3QgR2V0VGVzdCgpCnsKCXJldHVybiBUZXN0KHJhbmQoKSk7Cn0KCmludCBtYWluKCkKewoJVGVzdCB0OwoKCVRlc3QgdDEodCk7CglUZXN0IHQyID0gdDsKCglUZXN0IHQzKEdldFRlc3QoKSk7CglUZXN0IHQ0ID0gVGVzdCgpOwoKCVRlc3QgdDUgPSBUZXN0KHQpOwoKCXQxID0gdDsKCXQyID0gVGVzdCgpOwoJcmV0dXJuIDA7Cn0K