"Почему компилятор c ++ не предупреждает о возврате ссылки на локальную переменную?"
Поскольку компиляторы не идеальны и, в конечном итоге, ваша обязанность не писать неверный код.Компилятор не обязан предупреждать обо всем, что неправильно (на самом деле, он обязан предупреждать по очень мало , но большинство стараются сделать лучше, чем минимальное требование).