views:

91

answers:

1

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?

+7  A: 

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).

Kirill V. Lyadvinsky
Thanks. That did it.
uj2
Nice one :) Worth noting that the space before `::B` is needed, though :)
Johannes Schaub - litb