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?