РЕДАКТИРОВАТЬ: ref должен быть инициализирован в списке инициализации конструктора.

л 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'or init-списке c'or бара будет уничтожено после c'or бара, так чтоfoo d'tor должен быть напечатан послеbar c'tor
но это наоборот.
Пожалуйста, объясните причину.

Ответы на вопрос(1)

Ваш ответ на вопрос