为什么铿锵声++只销毁一个foo对象?

我有以下示例代码:

#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. 

但我预计会有另外一个“被摧毁”。 两者之间“富build”。 线。 为什么只有一个foo被摧毁? 这与clang 3.5.1以及3.6.0发生。

感谢所有testing过的人! 这似乎是叮当中的一个错误。 如果有人向llvm.org报告,我将不胜感激。 我的一些错误报告说,不是很有帮助,所以我不想重复那个经验。