这是示例代码:
struct A
{
virtual int operator & ( A & ) { return 0; }
};
struct B : public A {};
struct C : public A {};
struct D : public C, public B {};
int main()
{
D d;
std::cout << &d << std::endl;
return 0;
}
它在 VS 2008 中完美运行,但 GCC 无法编译它:
../src/TestCast.cpp: In function ‘int main()’:
../src/TestCast.cpp:26:16: error: request for member ‘operator&’ is ambiguous
../src/TestCast.cpp:15:14: error: candidates are: virtual int A::operator&(A&)
../src/TestCast.cpp:15:14: error: virtual int A::operator&(A&)
make: *** [src/TestCast.o] Error 1
据我所知,它通过名称而不是签名来查找 operator& 重载,因此它会发现模棱两可的重载并产生错误。
问题是:标准是否正确?如果不是,哪一段描述了它?有什么方法可以让 GCC 接受这个代码(我的意思是,通过签名而不是通过名称查找)。
顺便说一句,我知道如何修复此代码。我只想知道,为什么会出现错误。