-MyXa-:
MX>5.16.2 If either the second or the third operand has type (possibly cv-qualified) void, then the lvalue-to-rvalue, array-to-pointer, and function-to-pointer standard conversions are performed on the second and third operands, and one of the following shall hold:
MX>— The second or the third operand (but not both) is a throw-expression; the result is of the type of the other and is an rvalue.
MX>И зачем так сделали?
Я бы тоже хотел узнать ответ на этот вопрос
В стандарте даже не сказано, каким образом должно получаться это rvalue (возможные варианты: это может быть либо гарантированно исходный объект, либо copy-initialized temporary object, либо copy constructed temporary object).
MX>Или это не относится к моему вопросу?
Относится. Компилятор считает, что ты пытаешься вернуть по ссылке временный объект, который по выходе из функции существовать не будет.