C ++ Оператор преобразования Перегрузка оператора, enums, ints и chars

Когда я пытаюсь компилировать (с GCC 4.3.4) этот фрагмент кода:

enum SimpleEnum {
    ONEVALUE
};

void myFunc(int a) {
}

void myFunc(char ch) {
}

struct MyClass {
    operator int() const { return 0; };
    operator SimpleEnum() const { return ONEVALUE; };
};

int main(int argc, char* argv[]) {
    myFunc(MyClass());
}

Я получаю эту ошибку:

test.cc: In function "int main(int, char**)":
test.cc:17: error: call of overloaded "myFunc(MyClass)" is ambiguous
test.cc:5: note: candidates are: void myFunc(int)
test.cc:8: note:                 void myFunc(char)

Я думаю, что я (почти) понимаю, что проблема, то есть (упрощая его Лот) Даже если я говорю о «Char» и «Enum», все они целые числа, а затем перегрузка неоднозначна.

В любом случае, то, что я не понимаю, это то, что если я удалю вторую перегрузку MyFunc или один из операторов преобразования MyClass , у меня нет Ошибки компиляции.

Так как я собираюсь изменить много старого кода из-за этой проблемы (я портирую код из старой версии HP-UX Acc в G ++ 4.3.4 под Linux), я хотел бы лучше понять Все, чтобы выбрать лучший способ изменить код.

заранее спасибо за любую помощь.

7
задан Kilian Foth 15 September 2011 в 16:22
поделиться