Почему 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 = С++ 11 test.cc, программа выдает следующий вывод:

foo constructed.
foo constructed.
foo destroyed.

но я ожидал дополнительного "foo destroy". между двумя "foo built". линий. Почему только один foo уничтожен? Это происходит с clang 3.5.1, а также с 3.6.0.

Ответ 1

Спасибо всем, кто его протестировал! Кажется, это ошибка в clang. Буду признателен, если кто-нибудь сообщит об этом на llvm.org. Мои небольшие сообщения об ошибках были, скажем, не очень полезными, поэтому я не хочу повторять этот опыт.