Рассмотрим следующий код:
struct foo
{
foo(foo const&) = default; // To make sure it exists
};
foo& get_local_foo_reference()
{
foo my_local_foo;
return my_local_foo; // Return a reference to a local variable
}
int main()
{
foo my_foo = get_local_foo_reference();
}
Теперь все согласятся, что возвращение ссылки на локальную переменную - это плохо и ведет к неопределенному поведению.
Но в случае copy initialization (как показано в приведенном выше коде) аргумент является константной ссылкой lvalue, поэтому это должна быть ссылка инициализации аргумента, которая продлевает время жизни ссылки.
Это допустимо, или это все еще неопределенное поведение?