#if 0 template class Outer { public: template class Nested { }; Nested nested() const; }; template Outer::Nested Outer::nested() const { return Nested(); } #else #if 1 template class Outer { public: class Nested { }; Nested nested() const; }; template // typename Outer::Nested Outer::nested() const { return Nested(); } #else template class Outer { public: class Nested { }; Nested nested() const { return Nested(); } }; #endif #endif