Resucitando un hilo antiguo, pero puedo ver que nadie mencionó la sobrecarga de los calificadores de referencia. Los calificadores de referencia son una característica del lenguaje agregada en C ++ 11 y recientemente me encontré con ella; no está tan extendida como, por ejemplo, los calificadores de cv. La idea principal es distinguir entre los dos casos: cuando la función miembro se llama en un objeto rvalue y cuando se llama en un objeto lvalue. Básicamente, puedes escribir algo como esto (estoy modificando ligeramente el código de OP):
#include <stdio.h>
class My {
public:
int get(int) & {
printf("returning int..\n");
return 42;
}
char get(int) && {
printf("returning char..\n");
return 'x';
};
};
int main() {
My oh_my;
oh_my.get(13);
My().get(13);
}
Este código producirá el siguiente resultado:
returning int..
returning char..
Por supuesto, como es el caso de los calificadores cv, ambas funciones podrían haber devuelto el mismo tipo y la sobrecarga aún sería exitosa.