Это должно быть ошибкой компиляции, хотя не было бы, если бы вместо этого
const Foo& badfoo = getFoo();
Поскольку существует специальное правило, которое продлевает время жизни временных значений, привязанных к константным ссылкам, но только к константным ссылкам, а не к любой ссылке.
Код, который вы разместили, дает мне ожидаемую ошибку компиляции
ошибка: неверная инициализация
неконстантная ссылка типа "Foo &"
из временного типа "Foo"
на G ++ 4.3.2. Какой компилятор вы используете?