#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=