#include <iostream>
class Example
{
public:
Example();
Example(Example const & orig);
Example & operator= (Example const & orig);
};
Example::Example() {}
Example::Example(Example const & orig)
{
std::cout << "Copy called." << std::endl;
}
Example & Example::operator=(Example const & orig)
{
std::cout << "Assign called." << std::endl;
return *this;
}
int main()
{
std::cout << "1" << std::endl;
Example foo;
std::cout << "2" << std::endl;
auto x = Example();
std::cout << "3" << std::endl;
Example y = x;
std::cout << "4" << std::endl;
y = Example();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKY2xhc3MgRXhhbXBsZQp7CiAgICBwdWJsaWM6CiAgICAgICAgRXhhbXBsZSgpOwogICAgICAgIEV4YW1wbGUoRXhhbXBsZSBjb25zdCAmIG9yaWcpOwogICAgICAgIEV4YW1wbGUgJiBvcGVyYXRvcj0gKEV4YW1wbGUgY29uc3QgJiBvcmlnKTsKfTsKCkV4YW1wbGU6OkV4YW1wbGUoKSB7fQoKRXhhbXBsZTo6RXhhbXBsZShFeGFtcGxlIGNvbnN0ICYgb3JpZykKewogICAgc3RkOjpjb3V0IDw8ICJDb3B5IGNhbGxlZC4iIDw8IHN0ZDo6ZW5kbDsKfQoKRXhhbXBsZSAmIEV4YW1wbGU6Om9wZXJhdG9yPShFeGFtcGxlIGNvbnN0ICYgb3JpZykKewogICAgc3RkOjpjb3V0IDw8ICJBc3NpZ24gY2FsbGVkLiIgPDwgc3RkOjplbmRsOwogICAgcmV0dXJuICp0aGlzOwp9CgppbnQgbWFpbigpCnsKICAgIHN0ZDo6Y291dCA8PCAiMSIgPDwgc3RkOjplbmRsOwogICAgRXhhbXBsZSBmb287CiAgICBzdGQ6OmNvdXQgPDwgIjIiIDw8IHN0ZDo6ZW5kbDsKICAgIGF1dG8geCA9IEV4YW1wbGUoKTsKICAgIHN0ZDo6Y291dCA8PCAiMyIgPDwgc3RkOjplbmRsOwogICAgRXhhbXBsZSB5ID0geDsKICAgIHN0ZDo6Y291dCA8PCAiNCIgPDwgc3RkOjplbmRsOwogICAgeSA9IEV4YW1wbGUoKTsKICAgIHJldHVybiAwOwp9