Этот код:
template <template <typename> class T>
class A
{
};
template <typename T>
class B
{
A<B> x;
};
не компилирует, я предполагаю с тех пор A<B>
интерпретируется как A<B<T> >
в B
объем.
Так, как Вы передаете B
как шаблонный шаблонный параметр в он - объем?
Попробуйте следующее:
template <typename T>
class B
{
A< ::B > x; // fully qualified name for B
};
В соответствии со стандартом C ++ 14.6.1 / 2 вы должны использовать обычное имя шаблона (т. Е. Имя из охватывающей области, а не внедренного класса- имя).