В стандарте С++ утверждается, что возвращение ссылки на локальную переменную (в стеке) - это поведение undefined, поэтому почему многие (если не все) из существующих компиляторов дают предупреждение только для этого?
struct A{
};
A& foo()
{
A a;
return a; //gcc and VS2008 both give this a warning, but not a compiler error
}
Не лучше ли, если компиляторы выдадут ошибку вместо предупреждения для этого кода?
Есть ли большие преимущества, позволяющие компилировать этот код с помощью всего лишь предупреждения?
Обратите внимание, что это не ссылка const
, которая может продлить время жизни временного ресурса самой ссылки.