#include <iostream>
using namespace std;
class test {
public:
test(int input = 0)
: value(input)
{
std::cout << "default constructor called with " << value << "\n";
}
test(const test& other)
: test(other.value)
{
std::cout << "copy constructor called with " << value << "\n";
}
test(test&& other) noexcept
: test()
{
std::swap(value, other.value);
std::cout << "move constructor called with " << value << "\n";
}
test& operator=(test other)
{
std::swap(value, other.value);
std::cout << "copy assignment called with " << value << "\n";
return *this;
}
/*
test& operator=(const test& other)
{
test tmp(other);
std::swap(value, tmp.value);
std::cout << "copy assignment called with " << value << "\n";
return *this;
}
*/
test& operator=(test&& other)
{
std::swap(value, other.value);
std::cout << "move assignment called with " << value << "\n";
return *this;
}
int value;
};
int main() {
test myTest1 = std::move(test(1));
test myTest2 = test(2);
myTest1 = myTest2;
myTest1 = std::move(myTest2);
// your code goes here
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgdGVzdCB7CglwdWJsaWM6Cgl0ZXN0KGludCBpbnB1dCA9IDApCgkJOiB2YWx1ZShpbnB1dCkKCXsKCQlzdGQ6OmNvdXQgPDwgImRlZmF1bHQgY29uc3RydWN0b3IgY2FsbGVkIHdpdGggIiA8PCB2YWx1ZSA8PCAiXG4iOwoJfQoJCgl0ZXN0KGNvbnN0IHRlc3QmIG90aGVyKQoJCTogdGVzdChvdGhlci52YWx1ZSkKCXsKCQlzdGQ6OmNvdXQgPDwgImNvcHkgY29uc3RydWN0b3IgY2FsbGVkIHdpdGggIiA8PCB2YWx1ZSA8PCAiXG4iOwoJfQoJCQoJdGVzdCh0ZXN0JiYgb3RoZXIpIG5vZXhjZXB0CgkJOiB0ZXN0KCkKCXsKCQlzdGQ6OnN3YXAodmFsdWUsIG90aGVyLnZhbHVlKTsKCQlzdGQ6OmNvdXQgPDwgIm1vdmUgY29uc3RydWN0b3IgY2FsbGVkIHdpdGggIiA8PCB2YWx1ZSA8PCAiXG4iOwoJfQoJCgl0ZXN0JiBvcGVyYXRvcj0odGVzdCBvdGhlcikKCXsJCgkJc3RkOjpzd2FwKHZhbHVlLCBvdGhlci52YWx1ZSk7CgkJc3RkOjpjb3V0IDw8ICJjb3B5IGFzc2lnbm1lbnQgY2FsbGVkIHdpdGggIiA8PCB2YWx1ZSA8PCAiXG4iOwoJCXJldHVybiAqdGhpczsKCX0KCS8qCgl0ZXN0JiBvcGVyYXRvcj0oY29uc3QgdGVzdCYgb3RoZXIpCgl7CgkJdGVzdCB0bXAob3RoZXIpOwkKCQlzdGQ6OnN3YXAodmFsdWUsIHRtcC52YWx1ZSk7CgkJc3RkOjpjb3V0IDw8ICJjb3B5IGFzc2lnbm1lbnQgY2FsbGVkIHdpdGggIiA8PCB2YWx1ZSA8PCAiXG4iOwoJCXJldHVybiAqdGhpczsKCX0KCSovCgkKCXRlc3QmIG9wZXJhdG9yPSh0ZXN0JiYgb3RoZXIpCgl7CgkJc3RkOjpzd2FwKHZhbHVlLCBvdGhlci52YWx1ZSk7CgkJc3RkOjpjb3V0IDw8ICJtb3ZlIGFzc2lnbm1lbnQgY2FsbGVkIHdpdGggIiA8PCB2YWx1ZSA8PCAiXG4iOwoJCXJldHVybiAqdGhpczsKCX0KCQoJaW50IHZhbHVlOwp9OwoKaW50IG1haW4oKSB7Cgl0ZXN0IG15VGVzdDEgPSBzdGQ6Om1vdmUodGVzdCgxKSk7Cgl0ZXN0IG15VGVzdDIgPSB0ZXN0KDIpOwoJbXlUZXN0MSA9IG15VGVzdDI7CglteVRlc3QxID0gc3RkOjptb3ZlKG15VGVzdDIpOwoJLy8geW91ciBjb2RlIGdvZXMgaGVyZQoJcmV0dXJuIDA7Cn0=