I have the following example code:
#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;
}
When I compile it with clang++ -std=c++11 test.cc, the program produces the following output:
foo constructed.
foo constructed.
foo destroyed.
but I expected an additional "foo destroyed." between the two "foo constructed." lines. Why is only one foo destroyed? This happens with clang 3.5.1 as well as 3.6.0.