#include <functional>
#include <vector>
#include <iostream>
class A
{
public :
A( ) = delete ;
A( int i)
: my_i( i) , whoAmI( [ this ] ( ) - > void { std:: cout << "I am class A with i=" << this- > my_i << std:: endl ; } )
{
}
A( const A& ) = delete ;
A( A&& a)
{
this- > my_i = a.my_i ;
this- > whoAmI = [ this ] ( ) - > void { std:: cout << "I am class A with i=" << this- > my_i << std:: endl ; } ;
} ;
int my_i;
std:: function < void ( ) > whoAmI;
} ;
int main( )
{
std:: vector < A> vec;
std:: cout << "Initialization:" << std:: endl ;
for ( int i = 0 ; i< 3 ; ++ i)
{
vec.push_back ( A( i) ) ;
vec.back ( ) .whoAmI ( ) ;
}
std:: cout << "Retrieval:" << std:: endl ;
for ( int i = 0 ; i< 3 ; ++ i)
vec.at ( i) .whoAmI ( ) ;
}
I2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiNpbmNsdWRlIDx2ZWN0b3I+CiNpbmNsdWRlIDxpb3N0cmVhbT4KCmNsYXNzIEEKewpwdWJsaWM6CglBKCkgPSBkZWxldGU7CglBKGludCBpKQoJCTogbXlfaShpKSwgd2hvQW1JKFt0aGlzXSgpLT52b2lkIHsgc3RkOjpjb3V0IDw8ICJJIGFtIGNsYXNzIEEgd2l0aCBpPSIgPDwgdGhpcy0+bXlfaSA8PCBzdGQ6OmVuZGw7IH0pCgl7Cgl9CglBKGNvbnN0IEEmKSA9IGRlbGV0ZTsKCUEoQSYmIGEpIAoJeyAKCQl0aGlzLT5teV9pID0gYS5teV9pOyAKCQl0aGlzLT53aG9BbUkgPSBbdGhpc10oKS0+dm9pZCB7IHN0ZDo6Y291dCA8PCAiSSBhbSBjbGFzcyBBIHdpdGggaT0iIDw8IHRoaXMtPm15X2kgPDwgc3RkOjplbmRsOyB9OyAKCX07CglpbnQgbXlfaTsKCXN0ZDo6ZnVuY3Rpb248dm9pZCgpPiB3aG9BbUk7Cn07CgppbnQgbWFpbigpCnsKCXN0ZDo6dmVjdG9yPEE+IHZlYzsKCXN0ZDo6Y291dCA8PCAiSW5pdGlhbGl6YXRpb246IiA8PCBzdGQ6OmVuZGw7Cglmb3IgKGludCBpID0gMDsgaTwzOyArK2kpCgl7CgkJdmVjLnB1c2hfYmFjayhBKGkpKTsKCQl2ZWMuYmFjaygpLndob0FtSSgpOwoJfQoJc3RkOjpjb3V0IDw8ICJSZXRyaWV2YWw6IiA8PCBzdGQ6OmVuZGw7Cglmb3IgKGludCBpID0gMDsgaTwzOyArK2kpCgkJdmVjLmF0KGkpLndob0FtSSgpOwp9