#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 );
}