я нашел то, что я считаю странное поведение в 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
, и clang-3.3
. Что вводит в заблуждение, так это то, что я явно не могу просить (bool)o
, потому что Base
является частным базой.
Ожидается ли такое поведение?
Разрешение перегрузки происходит до того, как рассматривается управление доступом. – juanchopanza
Так это указано в стандарте C++? Или это выбор компилятора? –
Это стандарт. – juanchopanza