#include <iostream>
#include <utility>
struct A
{
A() {}
A(A && other)
{
std::cout << "moved (using move-constructor) " << std::endl;
}
A& operator=(A && other)
{
std::cout << "moved (using move-assignment) " << std::endl;
return *this;
}
A(A const & other)
{
std::cout << "copied (using copy-constructor) " << std::endl;
}
A& operator=(A const & other)
{
std::cout << "copied (using copy-assignment) " << std::endl;
return *this;
}
};
struct B
{
A a;
B() {}
};
int main()
{
B b1,b2;
b1 = std::move(b1);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dXRpbGl0eT4KCnN0cnVjdCBBCnsKICAgIEEoKSB7fQogICAgQShBICYmIG90aGVyKSAKICAgIHsKICAgICAgICBzdGQ6OmNvdXQgPDwgIm1vdmVkICh1c2luZyBtb3ZlLWNvbnN0cnVjdG9yKSAiIDw8IHN0ZDo6ZW5kbDsKICAgIH0KICAgIEEmIG9wZXJhdG9yPShBICYmIG90aGVyKSAKICAgIHsKICAgICAgICBzdGQ6OmNvdXQgPDwgIm1vdmVkICh1c2luZyBtb3ZlLWFzc2lnbm1lbnQpICIgPDwgc3RkOjplbmRsOwogICAgICAgIHJldHVybiAqdGhpczsKICAgIH0gCiAgICBBKEEgY29uc3QgJiBvdGhlcikgCiAgICB7CiAgICAgICAgc3RkOjpjb3V0IDw8ICJjb3BpZWQgKHVzaW5nIGNvcHktY29uc3RydWN0b3IpICIgPDwgc3RkOjplbmRsOwogICAgfQogICAgQSYgb3BlcmF0b3I9KEEgY29uc3QgJiBvdGhlcikgCiAgICB7CiAgICAgICAgc3RkOjpjb3V0IDw8ICJjb3BpZWQgKHVzaW5nIGNvcHktYXNzaWdubWVudCkgIiA8PCBzdGQ6OmVuZGw7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgfQp9OwoKc3RydWN0IEIKewogICBBIGE7CiAgIEIoKSB7fQp9OwoKaW50IG1haW4oKSAKeyAgCiAgIEIgYjEsYjI7CiAgIGIxID0gc3RkOjptb3ZlKGIxKTsKfQ==