我有以下示例代码:
#include <iostream>
using namespace std;
struct foo {
foo() { cout << "foo constructed.\n"; }
~foo() { cout << "foo destroyed.\n"; }
};
struct bar {
bar(foo t=foo{}) { }
};
int main(int argc, char **argv) {
bar X[2]{};
return 0;
}
当我用clang ++ -std = c ++ 11 test.cc编译它时,程序产生以下输出:
foo constructed.
foo constructed.
foo destroyed.
但是我预计会有一个额外的&#34; foo被摧毁。&#34;在两个人之间构建了。&#34;线。为什么只有一个foo被摧毁?这种情况发生在clang 3.5.1以及3.6.0。
答案 0 :(得分:7)
感谢所有测试过的人!这似乎是铿锵的一个错误。如果有人向llvm.org报告,我会很感激。我的一些错误报告说,实际上并没有真正有用,所以我不打算重复这种经历。