Раздел 12.2.5 в C ++ 03 говорит: " Временная привязка к элементу ссылки в ctor-initializer конструктора (12.6.2) сохраняется, пока конструктор не выйдет "
Поэтому я попыталсяследующая программа
#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;
}
Вывод, который я получаю:
foo c'tor
foo d'tor
bar c'tor
Теперь в соответствии со стандартом, временное сгенерированное foo () в c'tor init-list бара c'tor willбыть уничтоженным после c'or бара, поэтому foo d'tor
должен быть напечатан после bar c'tor
, но все наоборот.
Пожалуйста, объясните причину.