bool foo(int & idx) { if (idx < m_count) { idx++; return m_bool[idx-1]; } return false; } class Foo { public: Foo(); Foo(const Foo& f); }; template< class T > class ListManager { protected: T head; public: ListManager() { head.next = head.prev = &head; } ListManager(const ListManager& ref) { head.next = head.prev = &head; } } const Foo & Foo::operator ==(Foo& me){ return me; } MyType& MyClass::myMethode() { const MyType& t = getSomewhere(); }