2014-01-10 51 views
7
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*/ 

出现了什么问题?我正在使用铛++ SVN。“模板模板参数的模板参数必须是类模板或类型别名模板”

+0

什么是模板实例,显示错误,还是模板已被列入失败? –

+0

@πάνταῥεῖ没有实例化。这实际上是程序中的所有代码(除了'int main(){return 0;}') –

+4

我喜欢这个错误信息:3个单词中的1个是“模板”。 – Casey

回答

11

您有一个模板模板参数。你必须传递一个模板作为它的参数。你改为传递一个模板实例化作为它的参数 - 这是一个具体的类,而不是一个模板(它的所有参数都被绑定)。

考虑:

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

template <typename> 
class ATemplate {}; 

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

模板的模板参数要求的模板,而不是它的一个实例。这:

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

如果你想通过List<T,TArgs...>,这是一类,你需要

template<typename T> struct ListHelper;