是否可以在解压缩列表后使用类型名作为模板参数?

时间:2014-10-06 23:19:55

标签: c++ templates c++11 variadic-templates

从最基本的意义上说,我想这样做:

template<typename ... Args>
struct{
    typedef std::tuple<Args ..., int> myTuple;
}

但MSVC(在VisualStudio 2013中)给了我一个奇怪的语法错误:

error C2143: syntax error : missing ';' before 'int'

是否可以在解压缩列表后使用常规typename作为模板参数?如果有,怎么样?如果不是,为什么不呢?

1 个答案:

答案 0 :(得分:3)

  

是否可以在解压缩列表后使用常规类型名称   模板参数?

是的,绝对的。您可以在参数列表中的包扩展之前和之后插入参数,并且完全按照您显示的方式完成。这只是另一个例子,说明VC ++(或者在这种情况下,它的错误信息)在模板和最近引入功能方面是多么无用。

通过试验在线编译器,我发现问题是结构定义后缺少的分号。由于某种原因,VC ++产生的编译器错误是指元组而不是结构的结尾。所以,检查是否缺少分号。