& quot; Аргумент шаблона для параметра шаблона должен быть шаблоном класса или псевдонимом типа & quot;

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.

8

Решение

У вас есть параметр шаблона шаблона. Вы должны передать шаблон в качестве аргумента. Вместо этого вы передаете экземпляр шаблона в качестве аргумента — это конкретный класс, а не шаблон (все его параметры связаны).

Рассматривать:

template <template<typename> typename X>
class WantsTemplate {};

template <typename>
class ATemplate {};

WantsTemplate<ATemplate> wt1;  // OK
WantsTemplate<ATemplate<int> > wt2;  // not OK
15

Другие решения

Параметр шаблона шаблона ожидает шаблон, а не его создание. Это:

template<typename T, typename... TArgs> struct ListHelper<List> { };
//                               only the template itself ^^^^

Если вы хотите пройти List<T,TArgs...>, который является классом, вам нужно

template<typename T> struct ListHelper;
1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector