В
template <typename T>
T const & foo(T const & dflt)
{ return /* ... */ ? /* ... */ : dflt; }
int x = foo(5);
Имеет ли ссылка временное "выживание", пока оно не будет присвоено х?
(я знаю, что он выдерживает длительность вызова foo (), но назначение заставляет меня колебаться)
В рассматриваемом коде есть несколько законных оснований полагаться на константные ссылки, то есть мне понадобятся две отдельные функции
T const & foo_cr(T const & dflt);
T const & foo_v(T dflt);
которого я хочу избежать (просто полагаться на разные подписи с одним и тем же именем мне кажется немного рискованным).