Потому что <<
имеет более высокий приоритет, чем ?
.
Веселое упражнение:
float ftest = std::cout << (a != 0) ? 42.0f : -42.0f;
Примите это, Coding Horror !!!
Ваш кодэквивалентно:
if ( std::cout << (a != 0) )
42.0f;
else
-42.0f;
Он выводит 1
, потому что, ну, (a != 0) == true
;