Если под «полиморфизмом возвращаемого типа» вы подразумеваете перегрузку, основанную на типе возвращаемого значения, я не уверен насчет других языков, но для C ++ вот ответ (в значительной степени из уст лошади):
Типы возвращаемых функций не вступают в игру в разрешении перегрузки просто потому, что Страуструп (я полагаю, с помощью других архитекторов C ++) хотел, чтобы разрешение перегрузки было «независимым от контекста». См. 7.4.1 - «Перегрузка и тип возврата» в «Языке программирования C ++, третье издание».
Причина в том, чтобы сохранить разрешение для
отдельный оператор или функция
вызов контекстно-независимый.
Они хотели, чтобы он основывался только на том, как вызывается перегрузка, а не на том, как был использован результат (если он вообще использовался). Действительно, многие функции вызываются без использования результата, иначе результат будет использоваться как часть большего выражения. Я уверен, что один из факторов вступил в игру, когда они решили, что если бы возвращаемый тип был частью разрешения, было бы много обращений к перегруженным функциям, которые нужно было бы разрешить с помощью сложных правил, или пришлось бы бросать компилятор. ошибка в том, что вызов был неоднозначным.
И, Господь знает, разрешение перегрузки в C ++ достаточно сложное ...