#include <iostream>
#include <vector>
using namespace std;
class A
{
public:
A(const std::string& text = "0") : m_text(text)
{
std::cout << "A()" << m_text << std::endl;
}
A(const A& a) : m_text(a.m_text)
{
std::cout << "A::copy()" << m_text << std::endl;
}
A(const A&& a) : m_text(a.m_text)
{
std::cout << "A::copy&&()" << m_text << std::endl;
}
A& operator=(const A& a)
{
std::cout << "A::operator=() from " << a.m_text << " to " << m_text << std::endl;
m_text = a.m_text;
char c;
// std::string test(c);
std::to_string(c);
return *this;
}
A& operator=(A&& a)
{
std::cout << "A::operator=&&() from " << a.m_text << " to " << m_text << std::endl;
//std::swap(&m_text, &a.m_text);
m_text.swap(a.m_text);
return *this;
}
virtual ~A()
{
std::cout << "~A()" << m_text << std::endl;
}
std::string m_text;
};
A test()
{
//A a("1");
A a;
a.m_text = "4";
return a;
//return std::move(a);
}
int main()
{
//A a(test());
A a("2");
a = test();
a.m_text = "3";
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgQQp7CnB1YmxpYzoKCglBKGNvbnN0IHN0ZDo6c3RyaW5nJiB0ZXh0ID0gIjAiKSA6IG1fdGV4dCh0ZXh0KQoJewoJCQoJCXN0ZDo6Y291dCA8PCAiQSgpIiA8PCBtX3RleHQgPDwgc3RkOjplbmRsOwoJfQoKCUEoY29uc3QgQSYgYSkgOiBtX3RleHQoYS5tX3RleHQpCgl7CgkJc3RkOjpjb3V0IDw8ICJBOjpjb3B5KCkiIDw8IG1fdGV4dCA8PCBzdGQ6OmVuZGw7Cgl9CgoJQShjb25zdCBBJiYgYSkgOiBtX3RleHQoYS5tX3RleHQpCgl7CgkJc3RkOjpjb3V0IDw8ICJBOjpjb3B5JiYoKSIgPDwgbV90ZXh0IDw8IHN0ZDo6ZW5kbDsKCX0KCglBJiBvcGVyYXRvcj0oY29uc3QgQSYgYSkKCXsKCQlzdGQ6OmNvdXQgPDwgIkE6Om9wZXJhdG9yPSgpIGZyb20gIiA8PCAgYS5tX3RleHQgPDwgIiB0byAiIDw8IG1fdGV4dCA8PCBzdGQ6OmVuZGw7CgkJCgkJbV90ZXh0ID0gYS5tX3RleHQ7CgkJCgkJY2hhciBjOwoJCQoJLy8Jc3RkOjpzdHJpbmcgdGVzdChjKTsKCQkKCQlzdGQ6OnRvX3N0cmluZyhjKTsKCQkKCQlyZXR1cm4gKnRoaXM7Cgl9CgkKCUEmIG9wZXJhdG9yPShBJiYgYSkKCXsKCQlzdGQ6OmNvdXQgPDwgIkE6Om9wZXJhdG9yPSYmKCkgZnJvbSAiIDw8ICBhLm1fdGV4dCA8PCAiIHRvICIgPDwgbV90ZXh0IDw8IHN0ZDo6ZW5kbDsKCQkKCQkvL3N0ZDo6c3dhcCgmbV90ZXh0LCAmYS5tX3RleHQpOwoJCQoJCW1fdGV4dC5zd2FwKGEubV90ZXh0KTsKCQkKCQlyZXR1cm4gKnRoaXM7Cgl9CgoJdmlydHVhbCB+QSgpCgl7CgkJc3RkOjpjb3V0IDw8ICJ+QSgpIiA8PCBtX3RleHQgPDwgc3RkOjplbmRsOwoJfQoJCglzdGQ6OnN0cmluZyBtX3RleHQ7Cn07CgpBIHRlc3QoKQp7CgkvL0EgYSgiMSIpOwoJQSBhOwoJCglhLm1fdGV4dCA9ICI0IjsKCQoJcmV0dXJuIGE7CgkvL3JldHVybiBzdGQ6Om1vdmUoYSk7Cn0KCmludCBtYWluKCkKewoJLy9BIGEodGVzdCgpKTsKCUEgYSgiMiIpOwoJYSA9IHRlc3QoKTsKCQoJYS5tX3RleHQgPSAiMyI7CgkKCXJldHVybiAwOwp9