Enlace temporal a referencia constante en la lista de inicializadores de c'tor
La sección 12.2.5 en C ++ 03 dice "Un enlace temporal a un miembro de referencia en un ctor-initializer de constructor (12.6.2) persiste hasta que el constructor sale"
Entonces intenté seguir el programa
#include<iostream>
using namespace std;
struct foo
{
foo()
{
cout<<"foo c'tor"<<endl;
}
~foo()
{
cout<<"foo d'tor"<<endl;
}
};
struct bar
{
const foo &ref;
bar():ref(foo())
{
cout<<"bar c'tor"<<endl;
}
};
int main()
{
bar obj;
}
El resultado que obtengo es:
foo c'tor
foo d'tor
bar c'tor
Ahora, según el estándar, el temporal generado por foo () en c'tor init-list de bar's c'tor se destruirá después de bar's c'tor sofoo d'tor
debe imprimirse despuésbar c'tor
pero es al revés.
Por favor explique la razón.