$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”不明确 return d->x(); // 模棱两可:B::x 或 C::x
按照 $10.2 中的名称查找规则,我觉得代码片段中的注释并不真正正确。该错误确实首先与基类“A”的歧义有关,而不是其他任何事情(例如重载决议中的歧义)。有什么想法吗?