¿Cuándo exactamente se destruye temporalmente un inicializador?
oy construí este experimento, después de responder alguna pregunt
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
tiene valorfalse
(resultante de la inicialización cero) antes de configurarlo entrue
por la inicialización dinámica. Si el temporal se destruye antes de la inicialización deb
terminado, imprimiremosfalse
, de lo contrariotrue
.
La especificación dice que el temporal se destruye al final de la expresión completa. Eso no parece estar ordenado con la inicialización deb
. Entonces me pregunto
false
ytrue
en diferentes carreras?Clang imprimefalse
para lo anterior, mientras que GCC imprimetrue
. Esto me confunde ¿Me perdí algún texto de especificación que define el orden?