Как правильно указывает Эмиль Кормиер здесь проблема заключается в том, что в месте создания A
, B
все еще является неполным типом, и вы не можете использовать внутренний шаблон.
Решением для этого является перемещение шаблона X
за пределы шаблона B
. Если он не зависит от конкретного экземпляра T
шаблона B
, просто переместите его на уровень пространства имен, если он зависит от экземпляра, вы можете использовать черты типа:
template <typename T>
struct inner_template
{
template <typename U> class tmpl { U mem; }; // can specialize for particular T's
};
template <typename T>
struct B : A< inner_template<T>::template tmpl >
{
};