Precedência do operador para “<<” e “++” no VS2008 com otimização

Estou com um problema estranho do VS2008 C ++, que parece que a precedência do operador não é respeitada.

Minha pergunta é qual é o resultado disso:

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

Normalmente o++ tem precedência sobre o<<, direito? Ou é o<< considerada como uma chamada de função, dando-lhe uma precedência mais alta++? Qual é a resposta padrão 100% correta para isso?

Para verificar, criei um novo projeto vazio (aplicativo de console do VS2008), colei apenas esse código no principal e eis os resultados:

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

Btw, o exemplo a seguir produz exatamente os mesmos resultados:

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

E também alterar o tipo de otimização na liberação não tem efeito, mas desabilitar as saídas de otimização “zero 1” como outras configurações.

questionAnswers(1)

yourAnswerToTheQuestion