#include <iostream>
#include <vector>
class A{
public:
A(int i){
std::cout << "Constructor "<< i <<std::endl;
for(int l = 0; l<i;l++){
vec.push_back(l);
}
};
A(A && ref): vec(std::move(ref.vec))
{
std::cout << "Move constructor"<<std::endl;
}
A & operator=(A && ref){
if(this != &ref){
vec = std::move(ref.vec);
}
std::cout << "Move assignment"<<std::endl;
return *this;
}
std::vector<int> vec;
private:
A(const A & ref);
A(A & ref);
A & operator=(A & ref);
};
A makeA(){
A a(3);
return a;
}
int main(){
A b1(makeA()) ;
A b2 = makeA();
A b3 = A(3);
A b4(A(3));
std::cout << b4.vec[2] << std::endl;
};
I2luY2x1ZGUgPGlvc3RyZWFtPiAgICAKICAgICNpbmNsdWRlIDx2ZWN0b3I+CgogICAgY2xhc3MgQXsKICAgIHB1YmxpYzoKICAgICAgICBBKGludCBpKXsKICAgICAgICAgICAgc3RkOjpjb3V0IDw8ICJDb25zdHJ1Y3RvciAiPDwgaSA8PHN0ZDo6ZW5kbDsKICAgICAgICAgICAgZm9yKGludCBsID0gMDsgbDxpO2wrKyl7CiAgICAgICAgICAgICAgICB2ZWMucHVzaF9iYWNrKGwpOwogICAgICAgICAgICB9CiAgICAgICAgfTsKICAgIAogICAgICAgIEEoQSAmJiByZWYpOiB2ZWMoc3RkOjptb3ZlKHJlZi52ZWMpKQogICAgICAgIHsKICAgICAgICAgICBzdGQ6OmNvdXQgPDwgIk1vdmUgY29uc3RydWN0b3IiPDxzdGQ6OmVuZGw7CiAgICAgICAgfQogICAgCiAgICAgICAgQSAmIG9wZXJhdG9yPShBICYmIHJlZil7CiAgICAgICAgICAgaWYodGhpcyAhPSAmcmVmKXsKICAgICAgICAgICAgICAgIHZlYyA9IHN0ZDo6bW92ZShyZWYudmVjKTsKICAgICAgICAgICB9CiAgICAgICAgICAgc3RkOjpjb3V0IDw8ICJNb3ZlIGFzc2lnbm1lbnQiPDxzdGQ6OmVuZGw7CiAgICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgCiAgICAgICAgfQogICAgCiAgICAgICAgc3RkOjp2ZWN0b3I8aW50PiB2ZWM7CiAgICAKICAgIHByaXZhdGU6CiAgICAgICAgQShjb25zdCBBICYgcmVmKTsKICAgICAgICBBKEEgJiByZWYpOwogICAgICAgIEEgJiBvcGVyYXRvcj0oQSAmIHJlZik7CiAgICB9OwoKCiAgICBBIG1ha2VBKCl7CiAgICAgICAgQSBhKDMpOwogICAgICAgIHJldHVybiBhOwogICAgfQogICAgCiAgICBpbnQgbWFpbigpewogICAgICAgIEEgYjEobWFrZUEoKSkgOwogICAgICAgIEEgYjIgPSBtYWtlQSgpOwogICAgICAgIEEgYjMgPSBBKDMpOwogICAgICAgIEEgYjQoQSgzKSk7CiAgICAgICAgc3RkOjpjb3V0IDw8IGI0LnZlY1syXSA8PCBzdGQ6OmVuZGw7CiAgICB9Ow==