Quando exatamente um inicializador é temporariamente destruído?
Eu construí esse experimento hoje, depois de responder a uma pergunta
struct A {
bool &b;
A(bool &b):b(b) { }
~A() { std::cout << b; }
bool yield() { return true; }
};
bool b = A(b).yield();
int main() { }
b
tem valorfalse
(resultante da inicialização zero) antes de defini-lo comotrue
pela inicialização dinâmica. Se o temporário for destruído antes da inicialização deb
terminado, imprimiremosfalse
, de outra formatrue
.
A especificação diz que o temporário é destruído no final da expressão completa. Isso não parece ser solicitado com a inicialização deb
. Então eu me pergun
false
etrue
em diferentes corridas?Clang printsfalse
acima, enquanto o GCC imprimetrue
. Isso me confunde. Perdi algum texto de especificação que define o pedido?