Имя шаблона класса означает «текущая специализация» (т. Е. Это имя внедренного класса) только после открытия {
определения шаблона класса внутри его области действия.До этого это имя шаблона.
Итак, CBase<ComponentX>
- это попытка передать шаблон в качестве аргумента CBase
, который ожидает пакет типов.
Исправление довольнопросто:
template<template<class...> class CBase>
struct ComponentX : public CBase<ComponentX<CBase>> // Specify the arguments
{
// This should compile now
};
ComponentX<CBase>
- это название специализации, которую вы хотите указать в качестве аргумента типа.