bru*_*tra 4 c++ templates c++11
假设有人需要对模板类型进行部分专业化处理,而该模板类型的所有参数都是的专门化,则该模板类型需要可变的类型列表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;
Run Code Online (Sandbox Code Playgroud)
我似乎在C ++标准草案(n4296)中找不到可以允许或不允许这种类型的模式匹配的任何内容,因此在我提交针对VS 14的错误报告之前,最好参考那里的专家:
上面的示例真的有效的C ++吗?
这是不正确的。[temp.param] / p15:
作为包扩展的模板参数包不应扩展在相同template-parameter-list中声明的参数包。
v既是包又是包扩展,它是expand t,它在同一template-parameter-list中声明。
| 归档时间: |
|
| 查看次数: |
107 次 |
| 最近记录: |