#include <iostream>
using std:: cout ;
using std:: endl ;
struct dummy{ } ;
struct BigInt {
BigInt( const dummy & ) { }
BigInt( ) {
cout << __PRETTY_FUNCTION__ << " : very very long operation" << endl;
}
BigInt( const BigInt & ) {
cout << __PRETTY_FUNCTION__ << " : very very long operation" << endl;
}
BigInt & operator= ( const BigInt & ) {
cout << __PRETTY_FUNCTION__ << " : very very long operation" << endl;
return * this ;
}
} ;
struct Foo {
BigInt i;
Foo( const BigInt & j ) {
i = j;
}
} ;
struct Bar {
BigInt i;
Bar( const BigInt & j ) : i( j ) { }
} ;
int main( ) {
BigInt bi( ( dummy( ) ) ) ;
Foo foo( bi ) ;
Bar bar( bi ) ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBzdGQ6OmNvdXQ7CnVzaW5nIHN0ZDo6ZW5kbDsKCnN0cnVjdCBkdW1teXt9OwoKc3RydWN0IEJpZ0ludCB7CiAgICBCaWdJbnQoIGNvbnN0IGR1bW15ICYgKSB7fQogICAgQmlnSW50KCkgewogICAgICAgIGNvdXQgPDwgX19QUkVUVFlfRlVOQ1RJT05fXyA8PCAiIDogdmVyeSB2ZXJ5IGxvbmcgb3BlcmF0aW9uIjw8IGVuZGw7CiAgICB9CiAgICBCaWdJbnQoIGNvbnN0IEJpZ0ludCAmICkgewogICAgICAgIGNvdXQgPDwgX19QUkVUVFlfRlVOQ1RJT05fXyA8PCAiIDogdmVyeSB2ZXJ5IGxvbmcgb3BlcmF0aW9uIjw8IGVuZGw7CiAgICB9CiAgICBCaWdJbnQgJiBvcGVyYXRvcj0oIGNvbnN0IEJpZ0ludCAmICkgewogICAgICAgIGNvdXQgPDwgX19QUkVUVFlfRlVOQ1RJT05fXyA8PCAiIDogdmVyeSB2ZXJ5IGxvbmcgb3BlcmF0aW9uIjw8IGVuZGw7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgfQp9OwoKc3RydWN0IEZvbyB7CiAgICBCaWdJbnQgaTsKICAgIEZvbyggY29uc3QgQmlnSW50ICYgaiApIHsKICAgICAgICBpID0gajsKICAgIH0KfTsKCnN0cnVjdCBCYXIgewogICAgQmlnSW50IGk7CiAgICBCYXIoIGNvbnN0IEJpZ0ludCAmIGogKSA6IGkoIGogKSB7fQp9OwoKaW50IG1haW4oKSB7CiAgICBCaWdJbnQgYmkoIChkdW1teSgpKSApOwogICAgRm9vIGZvbyggYmkgKTsKICAgIEJhciBiYXIoIGJpICk7Cn0=