ok
поддерживает operator bool
, и C ++ имеет эту замечательную функциональность, называемую неявное приведение и продвижение, и в этом случае для оператора двоичного сдвига <<
, bool
повышается до int
, и затем это смещается на 1.
Во втором случае вы не указали этот оператор, и, следовательно, нечего неявно преобразовать (и продвинуть) в int, и вы получите ошибку. Попробуйте позвонить !notOk
до смены, теперь есть bool, который будет повышен.