"abc" [0] 不是编译时常量
"abc"[0] not a compile-time constant
我有这个代码:
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 节替换为 [...]
相关文章:
- C++常量数组的编译时间较长
- 在编译时将常量字符* 转换为常量 char_type*
- 将编译时常量向量转换为堆分配版本
- 如何在常量计算表达式中获取编译时错误?
- 如何在编译时解析静态常量 std::string?
- 有没有办法在类实例中存储编译时常量?
- 检测编译时文本和常量
- ARM C++编译器不会编译具有可变常量成员的结构
- 强制在编译时计算类的类的常量成员
- Constexpr 类采用常量引用不编译
- 为什么对数组的常量左值引用不编译在下面?
- 由于缺少常量而出现编译错误
- 为什么在将常量 ptr 分配给常量引用时没有收到编译错误?
- 为什么可以在编译时访问非常量、非静态成员而无需类的实例
- 不是 VS2017 中的编译时常量表达式
- 将编译时定义大小的数组初始化为常量表达式
- 将大小为编译时常量的数组初始化为单个值
- 如何为 std::array 声明全局编译时常量?
- 返回非常量引用编译的 Const 方法
- 常量正确性编译错误到模板函数中的无效转换错误