template<typename... TArgs> struct List { };
template<template<typename...> class> struct ListHelper;
template<typename T, typename... TArgs> struct ListHelper<List<T, TArgs...>> { };
^
/*Error: Template argument for template template parameter
must be a class template or type alias template*/
В чем дело? Я использую Clang ++ SVN.
У вас есть параметр шаблона шаблона. Вы должны передать шаблон в качестве аргумента. Вместо этого вы передаете экземпляр шаблона в качестве аргумента — это конкретный класс, а не шаблон (все его параметры связаны).
Рассматривать:
template <template<typename> typename X>
class WantsTemplate {};
template <typename>
class ATemplate {};
WantsTemplate<ATemplate> wt1; // OK
WantsTemplate<ATemplate<int> > wt2; // not OK
Параметр шаблона шаблона ожидает шаблон, а не его создание. Это:
template<typename T, typename... TArgs> struct ListHelper<List> { };
// only the template itself ^^^^
Если вы хотите пройти List<T,TArgs...>
, который является классом, вам нужно
template<typename T> struct ListHelper;