![](/img/trans.png)
[英]Partial specialization of class template for a type that appears in any position of a variadic template parameter pack
[英]Partial template specialization depending on a variadic pack of integral constants of mixed type
假设需要部分地特化一个模板类型,该模板类型需要一个类型的可变列表,例如,它的所有参数都是std::integral_constant
。
clang和GCC的各种版本接受以下直接方法,但VS 14(2015)拒绝了错误:
错误C3522:'t':在此上下文中无法扩展参数包
template<typename...>
struct foo;
template<typename... t, t... v>
struct foo<std::integral_constant<t, v>...>
{
/* ... */
};
foo<std::integral_constant<int, -1>, std::true_type> bar;
我似乎无法在C ++标准草案(n4296)中找到任何允许或不允许这种类型的模式匹配的内容,所以在我提交针对VS 14的错误报告之前,我应该更好地咨询那些大师:
以上示例是否真的有效C ++?
这是不正确的。 [temp.param] / P15:
作为包扩展的模板参数包不应扩展在同一template-parameter-list中声明的参数包。
v
既是pack又是pack扩展,它扩展了t
,它在同一个template-parameter-list中声明 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.