“abc”[0]不是编译时常量

时间:2014-02-24 13:49:13

标签: c++ visual-c++ c++11 mingw

我有这段代码:

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

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

1 个答案:

答案 0 :(得分:4)

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

请注意,作为 constexpr 功能{@ 3}}的参考文件,是引入5.19更改的地方:

  

4.5.3修订了常量表达式

     

段落修改。用[...]

替换5.19节