Когда я пытаюсь скомпилировать (с помощью 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), я хотел бы лучше понять все это вЧтобы выбрать лучший способ изменить код.
Заранее благодарим за любую помощь.