繁体   English   中英

部分模板特化取决于混合类型的可变积分常量常量

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM