У меня есть следующий пример кода:
#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 = С++ 11 test.cc, программа выдает следующий вывод:
foo constructed.
foo constructed.
foo destroyed.
но я ожидал дополнительного "foo destroy". между двумя "foo built". линий. Почему только один foo уничтожен? Это происходит с clang 3.5.1, а также с 3.6.0.