#include <iostream> 
 
template < typename  T> 
struct  test_t{ 
    T value; 
 
    test_t( ) { 
        std:: cerr  <<  __PRETTY_FUNCTION__ <<  '\n ' ; 
    } 
 
    template < typename  X> 
    test_t( X&&  val)  :  value{ std:: forward < X> ( val) } { 
        std:: cerr  <<  __PRETTY_FUNCTION__ <<  '\n ' ; 
    } 
 
    template < typename  X> 
    test_t( const  test_t< X> &  rhs)  :  value{ rhs.value } { 
        std:: cerr  <<  __PRETTY_FUNCTION__ <<  '\n ' ; 
    } 
 
    template < typename  X> 
    test_t&  operator=  ( const  test_t< X> &  rhs) { 
        std:: cerr  <<  __PRETTY_FUNCTION__ <<  '\n ' ; 
        value =  rhs.value ; 
        return  * this ; 
    } 
 
    template < typename  X> 
    test_t( test_t< X> &&  rhs)  :  value{ std:: move ( rhs.value ) } { 
        std:: cerr  <<  __PRETTY_FUNCTION__ <<  '\n ' ; 
    } 
 
    template < typename  X> 
    test_t&  operator=  ( test_t< X> &&  rhs) { 
        std:: cerr  <<  __PRETTY_FUNCTION__ <<  '\n ' ; 
        value =  std:: move ( rhs.value ) ; 
        return  * this ; 
    } 
 
    ~test_t( ) { 
        std:: cerr  <<  __PRETTY_FUNCTION__ <<  '\n ' ; 
    } 
} ; 
 
 
#include <vector> 
 
int  main( ) { 
    std:: vector < test_t< int >>  container; 
 
    for ( int  n= 0 ;  n! = 3 ;  ++ n)  { 
        std:: cout  <<  n <<  '\n ' ; 
        container.emplace_back ( ) ; 
    } 
} 
 
 
				I2luY2x1ZGUgPGlvc3RyZWFtPgoKdGVtcGxhdGU8dHlwZW5hbWUgVD4Kc3RydWN0IHRlc3RfdHsKICAgIFQgdmFsdWU7CgogICAgdGVzdF90KCl7CiAgICAgICAgc3RkOjpjZXJyIDw8IF9fUFJFVFRZX0ZVTkNUSU9OX18gPDwgJ1xuJzsKICAgIH0KCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBYPgogICAgdGVzdF90KFgmJiB2YWwpIDogdmFsdWV7c3RkOjpmb3J3YXJkPFg+KHZhbCl9ewogICAgICAgIHN0ZDo6Y2VyciA8PCBfX1BSRVRUWV9GVU5DVElPTl9fIDw8ICdcbic7CiAgICB9CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgWD4KICAgIHRlc3RfdChjb25zdCB0ZXN0X3Q8WD4mIHJocykgOiB2YWx1ZXtyaHMudmFsdWV9ewogICAgICAgIHN0ZDo6Y2VyciA8PCBfX1BSRVRUWV9GVU5DVElPTl9fIDw8ICdcbic7CiAgICB9CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgWD4KICAgIHRlc3RfdCYgb3BlcmF0b3I9IChjb25zdCB0ZXN0X3Q8WD4mIHJocyl7CiAgICAgICAgc3RkOjpjZXJyIDw8IF9fUFJFVFRZX0ZVTkNUSU9OX18gPDwgJ1xuJzsKICAgICAgICB2YWx1ZSA9IHJocy52YWx1ZTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgWD4KICAgIHRlc3RfdCh0ZXN0X3Q8WD4mJiByaHMpIDogdmFsdWV7c3RkOjptb3ZlKHJocy52YWx1ZSl9ewogICAgICAgIHN0ZDo6Y2VyciA8PCBfX1BSRVRUWV9GVU5DVElPTl9fIDw8ICdcbic7CiAgICB9CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgWD4KICAgIHRlc3RfdCYgb3BlcmF0b3I9ICh0ZXN0X3Q8WD4mJiByaHMpewogICAgICAgIHN0ZDo6Y2VyciA8PCBfX1BSRVRUWV9GVU5DVElPTl9fIDw8ICdcbic7CiAgICAgICAgdmFsdWUgPSBzdGQ6Om1vdmUocmhzLnZhbHVlKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogICAgfnRlc3RfdCgpewogICAgICAgIHN0ZDo6Y2VyciA8PCBfX1BSRVRUWV9GVU5DVElPTl9fIDw8ICdcbic7CiAgICB9Cn07CgoKI2luY2x1ZGUgPHZlY3Rvcj4KCmludCBtYWluKCl7CiAgICBzdGQ6OnZlY3Rvcjx0ZXN0X3Q8aW50Pj4gY29udGFpbmVyOwoKICAgIGZvcihpbnQgbj0wOyBuIT0zOyArK24pIHsKICAgICAgICBzdGQ6OmNvdXQgPDwgbiA8PCAnXG4nOwogICAgICAgIGNvbnRhaW5lci5lbXBsYWNlX2JhY2soKTsKICAgIH0KfQo=