Si por "tipo de polimorfismo de retorno" te refieres a la sobrecarga en base al tipo de valor de retorno, no estoy seguro acerca de otros idiomas, pero para C++ Aquí está la respuesta (más o menos de la boca del caballo):
Función Los tipos de retorno no entran en juego en la resolución de sobrecarga simplemente porque Stroustrup (supongo que con la contribución de otros arquitectos de C++) quería que la resolución de sobrecarga fuera 'independiente del contexto'. Consulte 7.4.1 - "Tipo de sobrecarga y retorno" del "Lenguaje de programación C++, tercera edición".
La razón es mantener la resolución de un operador o función individual llamada independiente del contexto.
Querían que se basara solo en cómo se llamaba la sobrecarga, no cómo se usaba el resultado (si se utilizó en absoluto). De hecho, muchas funciones se llaman sin usar el resultado o el resultado se usaría como parte de una expresión más grande. Un factor que estoy seguro entró en juego cuando decidieron esto era que si el tipo de devolución formaba parte de la resolución habría muchas llamadas a funciones sobrecargadas que tendrían que resolverse con reglas complejas o tendrían que tener el lanzamiento del compilador un error que la llamada fue ambigua.
Y, Señor sabe, C++ resolución de sobrecarga es lo suficientemente complejo, ya que se encuentra ...
La inferencia de tipo se incluirá en C++ 0x, y es diferente del polimorfismo de tipo de retorno que está sugiriendo. –