在 C++14 中给出以下代码:
void foo() {
double d = 5.0;
auto p1 = new int[d];
}
clang 在没有诊断的情况下编译它,而另一方面 gcc 产生以下诊断(在 Godbolt 中查看它):
error: expression in new-declarator must have integral or enumeration type
7 | auto p1 = new int[d];
| ^
我特别标记了这个 C++14,因为在 C++11 模式下,clang 将其视为格式错误并产生以下诊断信息(在 godbolt 中查看它):
error: array size expression must have integral or unscoped enumeration type, not 'double'
auto p1 = new int[d];
^ ~
铿锵正确吗?如果是这样,C++14 中发生了什么变化以允许这样做?