#define SHOWS() cout<<(void*)this<<" "<<__PRETTY_FUNCTION__<<endl;
struct A
{
A() { SHOWS(); }
~A() { SHOWS(); }
A(const A&) { SHOWS(); }
operator const A&() const { SHOWS(); return *const_cast<A*>(this); }
};
A make() { return A(); }
int main()
{
{
cout << "construct:" << endl;
A const& a = A();
cout << "leaving the block..." << endl;
}
cout<<"-----"<<endl;
{
cout << "make:" << endl;
A const& a = make();
cout << "leaving the block..." << endl;
}
}