【发布时间】:2012-06-17 17:37:38
【问题描述】:
如果可能的话,可以在不递归的情况下索引可变参数模板参数包。但是,GCC 在这里是refusing to pick up my partial specialization:
template <int I, typename List>
struct element_impl;
template <typename... TL, int... IL, typename T, int I, typename... TR, int... IR>
struct element_impl<I, typelist<pair<TL,IL>..., pair<T,I>, pair<TR,IR>...>> {
typedef T type;
};
prog.cpp:在 '
element<0, typelist<int, double, char, float, long int> >' 的实例化中:
prog.cpp:52:34: 从这里实例化
prog.cpp:47:79: 错误:无效使用不完整类型'struct element_impl<0, typelist<pair<int, 0>, pair<double, 1>, pair<char, 2>, pair<float, 3>, pair<long int, 4> >'
GCC 有问题,还是我忽略了可变参数模板的一些限制?
【问题讨论】:
-
对于this simple code,GCC 说:
error: parameter pack 'T' must be at the end of the template parameter list。所以我倾向于认为这是一种语言限制。 -
@Nawaz 那完全不一样。
-
它并不“完全”相同,但错误消息非常清楚:参数包必须在模板参数列表的末尾。 GCC 也在这里重复同样的信息:ideone.com/2Rifn
-
@Nawaz 看来你是对的。 :(
-
@Nawaz 你有一个主模板。该限制不适用于部分专业化。
标签: c++ templates c++11 variadic-templates