C++ не допускает полиморфизма для методов на основе их возвращаемого типа. Однако при перегрузке функции-члена неявного преобразования это кажется возможным.
Кто-нибудь знает, почему? Я думал, что операторы обрабатываются как методы внутри.
Изменить: вот пример:
struct func {
operator string() { return "1";}
operator int() { return 2; }
};
int main( ) {
int x = func(); // calls int version
string y = func(); // calls string version
double d = func(); // calls int version
cout << func() << endl; // calls int version
}