Template class that refers to itself as a template template parameter?
This code: template <template <typename> class T> class A { }; template <typename T> class B { A<B> x; }; doesn't compile, I suppose since A<B> is interpreted as A<B<T> > within B 's scope. So, how do you pass B as a template template parameter within it's scope? Try this: template <typename T> class B { A< ::B > x; // fully qualified name for B }; According to C++ Standard 14.6.1/2 you should use the normal name of the template (i.e., the name from the enclosing scope, not the injected-class-name). 来源: https://stackoverflow.com/questions/3052415/template-class-that-refers-to-itself-as-a