Следующий код компилируется и выполняется без ошибок, хотя оператор равенства не определен:
class A {
public:
operator bool() const { return true; }
};
int main()
{
A a, b;
a == b; //why does this compile?
return 0;
}
Что происходит внутри a == b
, так это то, что operator bool() const
вызывается для обоих операндов, а затем два логических элемента сравниваются для равенства (это произошло в нашем производственном коде, где class A
умный тип указателя и дал семантически сомнительные результаты).
Мой вопрос: какое правило в стандарте С++ допускает неявное преобразование операндов обоих в этом случае? Я могу понять, что операнд один будет неявно преобразован в bool
для теста на равенство , если другой операнд уже был bool
, но не тот и другой.