#include <iostream>
#include <string>
struct TestClass
{
TestClass( )
{
std:: cout << "Instance has been constructed" << std:: endl ;
}
TestClass( const TestClass & from)
{
std:: cout << "Copy has been constructed" << std:: endl ;
}
TestClass & operator= ( const TestClass & from)
{
std:: cout << "Assignment" << std:: endl ;
return * this ;
}
~TestClass( )
{
std:: cout << "Instance has been destructed" << std:: endl ;
}
} ;
typedef std:: basic_string < TestClass> weird_string;
void Do1( weird_string t)
{
}
void Do2( weird_string & t)
{
}
int main( )
{
weird_string test( 1 ,TestClass( ) ) ;
std:: cout << "Start of main" << std:: endl ;
std:: cout << "Do1:" << std:: endl ;
Do1( test) ;
std:: cout << "Do2:" << std:: endl ;
Do2( test) ;
std:: cout << "End of main" << std:: endl ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgoKc3RydWN0IFRlc3RDbGFzcwp7CiAgICBUZXN0Q2xhc3MoKQogICAgewogICAgICAgIHN0ZDo6Y291dCA8PCAiSW5zdGFuY2UgaGFzIGJlZW4gY29uc3RydWN0ZWQiIDw8IHN0ZDo6ZW5kbDsKICAgIH0KICAgIFRlc3RDbGFzcyhjb25zdCBUZXN0Q2xhc3MgJmZyb20pCiAgICB7CiAgICAgICAgc3RkOjpjb3V0IDw8ICJDb3B5IGhhcyBiZWVuIGNvbnN0cnVjdGVkIiA8PCBzdGQ6OmVuZGw7CiAgICB9CiAgICBUZXN0Q2xhc3MgJm9wZXJhdG9yPShjb25zdCBUZXN0Q2xhc3MgJmZyb20pCiAgICB7CiAgICAgICAgc3RkOjpjb3V0IDw8ICJBc3NpZ25tZW50IiA8PCBzdGQ6OmVuZGw7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgfQogICAgflRlc3RDbGFzcygpCiAgICB7CiAgICAgICAgc3RkOjpjb3V0IDw8ICJJbnN0YW5jZSBoYXMgYmVlbiBkZXN0cnVjdGVkIiA8PCBzdGQ6OmVuZGw7CiAgICB9Cn07Cgp0eXBlZGVmIHN0ZDo6YmFzaWNfc3RyaW5nPFRlc3RDbGFzcz4gd2VpcmRfc3RyaW5nOwoKdm9pZCBEbzEod2VpcmRfc3RyaW5nIHQpCnsKfQp2b2lkIERvMih3ZWlyZF9zdHJpbmcgJnQpCnsKfQoKaW50IG1haW4oKQp7CiAgICB3ZWlyZF9zdHJpbmcgdGVzdCgxLFRlc3RDbGFzcygpKTsKICAgIHN0ZDo6Y291dCA8PCAiU3RhcnQgb2YgbWFpbiIgPDwgc3RkOjplbmRsOwogICAgc3RkOjpjb3V0IDw8ICJEbzE6IiA8PCBzdGQ6OmVuZGw7CiAgICBEbzEodGVzdCk7CiAgICBzdGQ6OmNvdXQgPDwgIkRvMjoiIDw8IHN0ZDo6ZW5kbDsKICAgIERvMih0ZXN0KTsKICAgIHN0ZDo6Y291dCA8PCAiRW5kIG9mIG1haW4iIDw8IHN0ZDo6ZW5kbDsKfQ==