为什么 clang++ 只销毁一个 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.

但我预计在两条"foo构建"行之间有一个额外的"foo被摧毁"。为什么只有一个 foo 被摧毁?这发生在 clang 3.5.1 和 3.6.0 中。

感谢所有测试它的人!这似乎是叮当声中的错误。如果有人向 llvm.org 报告,我将不胜感激。可以说,我的一些错误报告并没有真正的帮助,所以我不想重复这种经历。

最新更新