gpt4 book ai didi

c++ - 部分模板特化取决于混合类型的整数常量的可变参数包

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:43:58 26 4
gpt4 key购买 nike

假设需要部分特化一个模板类型,该模板类型需要一个可变类型列表,用于所有参数都是特化的情况,比如说,std::integral_constant

以下直接的方法被各种版本的 clang 和 GCC 接受,但被 VS 14 (2015) 拒绝并出现错误:

error C3522: 't': parameter pack cannot be expanded in this context

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:

A template parameter pack that is a pack expansion shall not expand a parameter pack declared in the same template-parameter-list.

v既是pack又是pack展开,它展开了t,声明在同一个template-parameter-list .

关于c++ - 部分模板特化取决于混合类型的整数常量的可变参数包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31954078/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com