Это связано с порядком операций. Это так же, как:
(cout << true) ? "Yes" : "No";
cout << true
возвращает ostream&
, который должен иметь преобразование в bool или эквивалентный ему. Результат ?:
отбрасывается.
Если это кажется странным (почему этот приоритет?), Просто помните, что operator<<
ostream - это перегрузка, введенная в коде C ++, которая не позволяет изменять приоритет. Приоритет <<
предназначен для того, что имеет смысл для сдвига битов. Его использование в качестве оператора потоковой передачи появилось намного позже.
Редактировать: Возможно, преобразовать в (void*)
, используя это: http://www.cplusplus.com/reference/iostream/ios/operator_voidpt/