【发布时间】:2016-03-27 15:02:19
【问题描述】:
第一个 sn-p 编译时没有任何警告 (live example):
#include <iostream>
struct A {
constexpr A(): i(5){}
constexpr operator int() { return 5; }
int i;
};
int main() {
A a;
int b[a]{ 0, 1, 2, 3, 4 };
std::cout << b[4] << '\n';
}
现在通过在转换运算符 (live example) 中返回 i 来更改上述 sn-p:
constexpr operator int() { return i; }
GCC 警告 b 是一个 VLA。
对我来说,这两种变体似乎都符合 C++14 中的第 §5.19 [expr.const]/3 段。
【问题讨论】:
标签: c++ gcc g++ language-lawyer c++14