为什么clang ++只会破坏一个foo对象?

时间:2015-03-11 15:40:03

标签: c++ clang

我有以下示例代码:

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

1 个答案:

答案 0 :(得分:7)

感谢所有测试过的人!这似乎是铿锵的一个错误。如果有人向llvm.org报告,我会很感激。我的一些错误报告说,实际上并没有真正有用,所以我不打算重复这种经历。