Каково обоснование дизайна, позволяющее этому
const Foo& a = function_returning_Foo_by_value();
но не этот
Foo& a = function_returning_Foo_by_value();
?
Что может произойти неправильно во второй строке (что в первой строке не пойдет не так)?