#include class a { public: a() { std::cout << "construction" << std::endl; } ~a() { std::cout << "destruction" << std::endl; } }; class guard { public: a _a; a* operator & () { return &_a; } }; guard f() { return guard(); } void g ( a* p ) { std::cout << "working with a" << std::endl; } int main() { g( &f() ); return 0; }