$ 7.3.3 / 14(C ++ 03)
struct A { int x(); };
struct B : A { };
struct C : A {
using A::x;
int x(int);
};
struct D : B, C {
using C::x;
int x(double);
};
int f(D* d) {
return d->x(); // ambiguous: B::x or C::x
}
'f'のコードのコメントは、'B::x'と'C::x'の間のあいまいさが予想されることを示しています。
ただし、g ++(ideone)またはComeauを使用してコンパイルすると、エラーはわずかに異なります。B::xまたはC::xのあいまいさを示す代わりに、これらのエラーは、AがDのあいまいなベースであるという事実を示します。
prog.cpp:関数内'int f(D *)':prog.cpp:16:エラー:'A'は'D'のあいまいなベースです</p>
と
"ComeauTest.c"、21行目:エラー:基本クラス"A"はあいまいですreturnd-> x(); //あいまい:B::xまたはC::x
$ 10.2の名前検索ルールを見ると、コードスニペットのコメントが実際には正しくないように感じます。エラーは、実際、何よりもまず、基本クラス「A」のあいまいさに関連しています(たとえば、過負荷解決のあいまいさ)。何かご意見は?