Следующий код вызывает поведение undefined.
int& foo()
{
int bar = 1234;
return bar;
}
g++ выдает предупреждение:
предупреждение: ссылка на локальную переменную bar возвращается [-Wreturn-local-addr]
clang++ тоже:
предупреждение: ссылка на стекную память, связанную с локальной переменной 'bar', возвращена [-Wreturn-stack-address]
Почему это не ошибка компиляции (игнорируя -Werror
)?
Есть ли случай, когда верность ссылки на локальный var действительна?
РЕДАКТИРОВАТЬ Как указано, спецификация позволяет компилировать этот файл. Итак, почему спецификация не запрещает такой код?