I'm stuck with a weird VS2008 C++ issue, that looks like operator precedence is not respected.
My question is what is the output of this:
int i = 0;
std::cout << ((i != 0) ? "Not zero " : "zero ") << ++i << std::endl;
Normally the ++
has precedence over the <<
, right? Or is the <<
considered like a function call giving it a higher precedence than the ++
? What is the 100% correct standard answer to this?
To check, I created a new empty project (VS2008 console app), pasted only this code in the main and here are the results:
Debug|Win32: “zero 1”
Release|Win32: “zero 1”
Debug|x64: “zero 1”
Release|x64: “Not zero 1”
Btw, the following example produces the exact same results:
i = 0;
printf("%s %d\n", ((i != 0) ? "Not zero" : "zero"), ++i);
And also changing the type of optimization in release has no effect, but disabling optimization outputs “zero 1” like other configurations.