The following code generates a compiler error on the function definition. Tested with 3.4.1 release 3.4.3 release 4.0.0 release --- template<class T> class foo { public: typedef T foo2; foo2 bar(); }; template<class T> foo<T>::foo2 foo<T>::bar() { return foo2(); }
Invalid, you need the typename keyword, like so: template<class T> class foo { public: typedef T foo2; foo2 bar(); }; template<class T> typename foo<T>::foo2 foo<T>::bar() { return foo2(); }