以下はコンパイルされません (Apple LLVM バージョン 4.2 (clang-425.0.28)):
class A {
public:
virtual void foo() {};
virtual void foo( int i ) {};
};
class B : public A {
public:
virtual void foo( int i ) override { foo(); }
};
コンパイラ エラーは、B::foo(int) 内の foo() の呼び出しに対する「引数が少なすぎます」です。コンパイラは、私が B::foo(int) を再帰的に呼び出したいと考えているようで、A::foo(void) を呼び出したいと認識していません。
foo() の呼び出しを A::foo() に置き換えると、エラーはなくなります。
しかし:
1) なぜこれが起こっているのですか? この場合 (またはクラス階層の下のオーバーライドされた関数) に解決されることは明らかです。
2) さらに重要なことは、foo(void) に対してもポリモーフィック レイト バインディングを使用したい場合、A::foo() を指定することは私が望むものではなく、B::foo() ももちろんコンパイラ エラーを生成します。
啓発を事前にありがとう!