c++ - compiler - ¿Por qué clang++ destruye solo un objeto foo?
llvm 3.7 0 (1)
Tengo el siguiente código de ejemplo:
#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;
}
Cuando lo compilo con clang ++ -std = c ++ 11 test.cc, el programa produce el siguiente resultado:
foo constructed.
foo constructed.
foo destroyed.
pero esperaba un "foo destruido" adicional. entre los dos "foo construido". líneas. ¿Por qué solo se destruye un foo? Esto sucede con clang 3.5.1 y 3.6.0.
¡Gracias por todas las personas que lo probaron! Esto parece ser un error en el sonido metálico. Agradecería que alguien lo informe a llvm.org. Mis pocos informes de errores no fueron, digamos, realmente útiles, por lo que no estoy buscando repetir esa experiencia.