Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么铿锵++;只销毁一个foo对象?_C++_Clang - Fatal编程技术网

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

C++ 为什么铿锵++;只销毁一个foo对象?,c++,clang,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) {

我有以下示例代码:

#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;
}

但我预计在两行“foo-constructed”之间还会有一行“foo-destromed”。为什么只有一个foo被销毁?clang 3.5.1和3.6.0都会出现这种情况。

感谢所有测试它的人!这似乎是一个叮当作响的错误。如果有人向llvm.org报告,我将不胜感激。我的一些bug报告,比如说,没有真正的帮助,所以我不想重复那种经验。

GCC4.9输出
foo-constructed。福被毁了。富构造。foo已销毁。
Clang3.5和3.6会复制您的结果。我猜这是clang中的一个bug(将libstdc++与clang一起使用仍然会产生错误的结果,因此我认为这不是标准的库问题)。尝试
endl
而不是
\n
@zenith:程序结束时会刷新流,bub!如果没有人尝试过,用
[10]
替换
[2]
,结果相似;10次施工,但仍有一次破坏。(OS X clang 3.5)。另外,通过删除
{}
进行测试。我特别喜欢.FWIW的区别,完成了(包括将其转化为asan和valgrind出现的内存泄漏),我发现这个问题很有趣,因为似乎所有具有默认参数的主要编译器都存在某种类型的
{}
初始值设定项问题。例如,请准确地查看和编辑我的想法。去年gcc就出现了这个问题!可悲的是,乔纳森在一年多前就报告了这个错误,但他们仍然没有修复它(我刚刚在Clang trunk中修复了这个问题,修复将在Clang 5中,也应该在Clang 4.0.1中。
foo constructed.
foo constructed.
foo destroyed.