#include <iostream>
using namespace std;
class Base {
public :
Base( ) {
cout << "create Base " << this << endl;
}
Base( const Base& a) {
cout << "create copy Base " << this << " " << & a<< endl;
}
Base( Base&& a)
{
cout << "create move Base " << this << " " << & a<< endl;
}
~Base( ) {
cout << "deleting Base " << this << endl;
}
Base & operator = ( const Base & a)
{
cout << "operator " << this << " " << & a<< endl;
return * this ;
}
Base & operator = ( const Base && a)
{
cout << "operator move " << this << " " << & a<< endl;
return * this ;
}
} ;
Base func ( Base x)
{
cout << "*********************" << endl;
return Base( x) ;
}
int main( )
{
Base a;
Base b;
cout << "!!!!!!!!!!!!!!!!!!!!!!!!!!" << endl;
b = func ( a) ;
cout << "!!!!!!!!!!!!!!!!!!!!!!!!!!" << endl;
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgQmFzZSB7CnB1YmxpYzoKICAgIEJhc2UoKXsKICAgICAgICBjb3V0PDwiY3JlYXRlIEJhc2UgIjw8dGhpczw8ZW5kbDsKICAgIH0KICAgIEJhc2UoY29uc3QgQmFzZSYgYSl7CiAgICAgICAgY291dDw8ImNyZWF0ZSBjb3B5IEJhc2UgIjw8dGhpczw8IiAiPDwmYTw8ZW5kbDsKICAgIH0KICAgIEJhc2UoQmFzZSYmIGEpICAKICAgIHsKICAgICAgICBjb3V0PDwiY3JlYXRlIG1vdmUgQmFzZSAiPDx0aGlzPDwiICI8PCZhPDxlbmRsOwogICAgfQogICAgfkJhc2UoKSB7CiAgICAgICAgY291dDw8ImRlbGV0aW5nIEJhc2UgIjw8dGhpczw8ZW5kbDsKICAgIH0KICAgIAogICAgQmFzZSAmIG9wZXJhdG9yID0gKGNvbnN0IEJhc2UgJmEpCiAgICB7CiAgICAJY291dDw8Im9wZXJhdG9yICI8PHRoaXM8PCIgIjw8JmE8PGVuZGw7CiAgICAJcmV0dXJuICp0aGlzOwogICAgfQogICAgQmFzZSAmIG9wZXJhdG9yID0gKGNvbnN0IEJhc2UgJiZhKQogICAgewogICAgCWNvdXQ8PCJvcGVyYXRvciBtb3ZlICI8PHRoaXM8PCIgIjw8JmE8PGVuZGw7CiAgICAJcmV0dXJuICp0aGlzOwogICAgfQogICAgCgp9OwoKQmFzZSBmdW5jIChCYXNlIHgpCnsKCWNvdXQ8PCIqKioqKioqKioqKioqKioqKioqKioiPDxlbmRsOwoJCglyZXR1cm4gQmFzZSh4KTsKfQogCmludCBtYWluKCkKewoKICAgICAgICBCYXNlIGE7CiAgICAgIAogICAgICAKICAgICAgIEJhc2UgYjsgCiAgICAgICAKICAgICAgICBjb3V0PDwiISEhISEhISEhISEhISEhISEhISEhISEhISEiPDxlbmRsOwogICAgICAgIAogICAgICAgYiA9IGZ1bmMgKGEpOwogICAgICAgCiAgICAgICBjb3V0PDwiISEhISEhISEhISEhISEhISEhISEhISEhISEiPDxlbmRsOwogICAgCiAgICByZXR1cm4gMDsKfQ==