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