template class Outer { public: template // template class class Inner; template // template function Type process(Type const &p1, Type const &p2); }; // template class member template template class Outer::Inner // no Type2 with `Inner' { public: Type1 variable1; Type2 variable2; }; // template function member template template Type Outer::process(Type const &p1, Type const &p2) { Type result; return result; }