Сохраняется ли эта временная ссылка достаточно долго?

В

template <typename T>
T const & foo(T const & dflt) 
  { return /* ... */ ? /* ... */ : dflt; }

int x = foo(5);

Сохраняется ли ссылка на временное значение до тех пор, пока оно не будет присвоено x?

(я знаю, что оно сохраняется во время вызова foo (), но это назначение заставляет меня колебаться)

Рассматриваемый код имеет несколько законных применений для использования здесь константных ссылок, т.е. мне понадобятся две отдельные функции

T const & foo_cr(T  const & dflt);
T const & foo_v(T dflt);

, которых я хочу избежать (просто полагаться на разные подписи с одним и тем же именем кажется мне немного рискованным.)

16
задан Lightness Races with Monica 8 March 2012 в 10:01
поделиться