class Foo1 {}; class Foo2 { public: Foo1& operator~() {return foo1;} private: Foo1 foo1; }; class Foo3 { public: Foo2& T() {return foo2;} private: Foo2 foo2; }; class Foo4 { public: void bar(const Foo3& f) {foo3 = f;} private: Foo3 foo3; };