Приоритет оператора для «<<» и «++» в VS2008 с оптимизацией

Я застрял со странной проблемой VS2008 C ++, которая выглядит так, будто приоритет оператора не учитывается.

Мой вопрос, что является результатом этого:

int i = 0;  
std::cout << ((i != 0) ? "Not zero " : "zero ") << ++i << std::endl;  

Обычно++ имеет приоритет над<<, право? Или это<< рассматривается как вызов функции, что дает ему более высокий приоритет, чем++? Каков на 100% правильный стандартный ответ на этот вопрос?

Чтобы проверить, я создал новый пустой проект (консольное приложение VS2008), вставил только этот код в основную и вот результаты:

Debug|Win32: “zero 1”  
Release|Win32: “zero 1”  
Debug|x64: “zero 1”  
Release|x64: “Not zero 1”

Кстати, следующий пример дает точно такие же результаты:

i = 0;  
printf("%s %d\n", ((i != 0) ? "Not zero" : "zero"), ++i);  

Кроме того, изменение типа оптимизации в выпуске не имеет никакого эффекта, но отключение оптимизации выводит «ноль 1», как и другие конфигурации.

Ответы на вопрос(1)

Ваш ответ на вопрос