Відроджуючи старий потік, але я бачу, що ніхто не згадував про перевантаження реф-кваліфікаторами. Ref-кваліфікатори - це мовна функція, додана в C ++ 11, і я нещодавно натрапив на неї - вона не настільки поширена, як, наприклад, cv-кваліфікатори. Основна ідея полягає у розрізненні двох випадків: коли функція-член викликається на об'єкт rvalue і коли викликається на об'єкт lvalue. В основному ви можете написати щось подібне (я трохи модифікую код 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);
}
Цей код видасть такий результат:
returning int..
returning char..
Звичайно, як у випадку з cv-кваліфікаторами, обидві функції могли повернути однаковий тип, і перевантаження все одно було б успішним.