(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の 2 番目のオーバーロード またはMyClassの変換演算子の 1 つを削除すると、コンパイル エラーが発生しないことです。
この問題のために古いコードを大量に変更する予定なので (古いバージョンの HP-UX aCC から Linux の g++ 4.3.4 にコードを移植しています)、全体をよりよく理解したいと思います。コードを変更する最善の方法を選択するために。
よろしくお願いします。