C++ 部分模板特化依赖于混合型积分常数的可变包

C++ 部分模板特化依赖于混合型积分常数的可变包,c++,templates,c++11,C++,Templates,C++11,假设一个模板类型的所有参数都是(std::integral_constant)的特化,则需要对该模板类型进行部分特化,该模板类型需要一个可变类型列表 以下直截了当的方法为各种版本的clang和GCC所接受,但被VS 14(2015)拒绝,错误如下: 错误C3522:“t”:无法在此上下文中扩展参数包 模板 结构foo; 模板 结构foo { /* ... */ }; 富吧; 我在C++标准草案(N429)中似乎找不到任何东西,它允许或不允许这种类型的模式匹配,所以在我对VS 14进行bug报告

假设一个模板类型的所有参数都是(
std::integral_constant
)的特化,则需要对该模板类型进行部分特化,该模板类型需要一个可变类型列表

以下直截了当的方法为各种版本的clang和GCC所接受,但被VS 14(2015)拒绝,错误如下:

错误C3522:“t”:无法在此上下文中扩展参数包

模板
结构foo;
模板
结构foo
{
/* ... */
};
富吧;
<>我在C++标准草案(N429)中似乎找不到任何东西,它允许或不允许这种类型的模式匹配,所以在我对VS 14进行bug报告之前,我最好先向Gururs咨询:


<强>上述例子是否真的有效C++?<强> < / P > < P>这是不正确的。[温度参数]/p15:

作为包扩展的模板参数包不得扩展 在同一模板参数列表中声明的参数包


v
既是包又是包扩展,它扩展
t
,在同一模板参数列表中声明。

。。。如果它是无效的,那么什么是合适的替代方案呢?哦,好吧,我想我应该提交一份针对GCC的bug报告,以及针对
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;