我有以下示例代码:
#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.
但我预计在两条"foo构建"行之间有一个额外的"foo被摧毁"。为什么只有一个 foo 被摧毁?这发生在 clang 3.5.1 和 3.6.0 中。
感谢所有测试它的人!这似乎是叮当声中的错误。如果有人向 llvm.org 报告,我将不胜感激。可以说,我的一些错误报告并没有真正的帮助,所以我不想重复这种经历。