使用'使用'的变量模板和类型定义

mic*_*mic 0 c++ templates using variadic-templates c++11

我写了一个小using语句,可以轻松访问可变参数模板参数包的类型.

template<size_t index, typename args...>
using get = std::tuple_element<index, std::tuple<args...>>::type;
Run Code Online (Sandbox Code Playgroud)

但是用clang(3.5.0)或gcc(4.9.0)编译它会失败.这是clang的错误输出:

error: expected ',' or '>' in template-parameter-list template<size_t index, typename args...>
                                                                                          ^
Run Code Online (Sandbox Code Playgroud)

using语句是否与可变参数模板不可组合?或者我做错了什么?

Pra*_*ian 6

参数包的省略号需要在typename(或class)关键字之后.它在展开包时追踪参数名称.

template<size_t index, typename... args>
//                             ^^^
using get = typename std::tuple_element<index, std::tuple<args...>>::type;
//          ^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)

您还缺少typename引用嵌套依赖类型时所需的关键字.