我在 C++ 中发现了一些我认为奇怪的行为:私有基类中的类型转换运算符在尝试解析隐式转换时使编译器感到困惑:
#include <iostream>
struct Base
{
#ifdef ENABLE
operator bool () const { return true; }
#endif
};
struct Derived : private Base
{
operator int () const { return 7; }
};
int main()
{
Derived o;
std::cout << o << '\n';
return 0;
}
没有-DENABLE
,代码编译得很好,并输出7
. 使用-DENABLE
,代码不再编译,抱怨一个模棱两可的重载。我试过了gcc-4.6.5
,gcc-4.8.1
和clang-3.3
。令人困惑的是,我显然不能要求(bool)o
,因为Base
是私人基地。
这是预期的行为吗?