"abc" [0] 不是编译时常量

"abc"[0] not a compile-time constant

本文关键字:编译 常量 abc      更新时间:2023-10-16

我有这个代码:

template< char... chars >
struct VariadicTemplate
{};

int
main()
{
    VariadicTemplate< "abc"[ 0 ], "abc"[ 1 ], "abc"[ 2 ] >  v;
}

这在 mingw-w64 4.8.1 中编译得很好。但是,在 MSVC 2013 和 VC++ 11 月 CTP 下也不会编译相同的错误:

错误

1 错误 C2975:"chars":"VariadicTamplate"的模板参数无效,预期的编译时常量表达式

"

否"或"部分"中的哪一个指的是这一点?http://blogs.msdn.com/b/vcblog/archive/2013/12/02/c-11-14-core-language-features-in-vs-2013-and-the-nov-2013-ctp.aspx

如果没有,这是编译器错误吗?

从 C++03 到 C++11 的行为变化可以在 5.19 常量表达式中找到(相同的子句两个标准)。 因此,我怀疑它会被 constexpr 无/部分覆盖。

请注意,作为 constexpr 特性 n2235 的参考而给出的论文是引入 5.19 更改的地方:

4.5.3 修正常量表达式

段落修改。将第 5.19 节替换为 [...]