С использованием:
g++ -Wall -ansi foo.cpp
я получаю предупреждение
foo.cpp:31: предупреждение: возвращена ссылка на локальную переменную «x»
из функции:
int &bar(int x) {
return x;
}
но, удалив эту функцию из файла, я не получаю предупреждения от следующей функции:
int &get_max(int x, int y) {
return x > y ? x : y;
}
Почему компилятор это допускает?
clang 3.4
сообщает об этом в обоих случаях. - person Anirudh Ramanathan   schedule 26.04.2015gcc
ловит ее с включенной оптимизацией, но не без оптимизации. - person Shafik Yaghmour   schedule 26.04.2015gcc
, похоже, хочет отловить эти случаи, и это происходит, когда оптимизация включена, так что это выглядит как ошибка, которую командаgcc
, вероятно, хочет исправить, но мы не узнаем об этом без отчета об ошибке. - person Shafik Yaghmour   schedule 26.04.2015