【发布时间】:2016-05-20 00:58:08
【问题描述】:
以下代码:
struct Foo
{
Foo(int){} // no default constructor
};
int main()
{
Foo* pFoo = new Foo[2]{1,2}; // OK in g++, fails in clang++!
delete[] pFoo;
}
compiles in gcc,但fails in clang。上面的代码语法正确吗?
【问题讨论】:
-
就在我认为我们可以信任我们的工具的时候。我想你弄坏了其中一个。看,这就是为什么我们不能有好的编译器。
-
代码在语法上是正确的:
new Foo[2]后面可以跟一个大括号括起来的列表。我猜你实际上是在问它是否格式正确 -
对我来说看起来像clang bug。来自 clang 3.8 的错误消息是无稽之谈,例如“注意:在数组元素 2 的隐式初始化中,省略了初始化程序”
-
如果你确实提供了一个默认构造函数,clang 不会调用它
-
参见llvm.org/bugs/show_bug.cgi?id=22924 以及其中的讨论;还有wg21.link/cwg2102.
标签: c++ arrays c++11 language-lawyer