Thanks for reminding me about "sequence points". Interestingly, one exists after function arguments are evaluated but before the function is called, but one does _not_ exist after the bulit-in + operator's arguments are evaluated but before the addition is carried out. Of course, a user-defined operator+, being a function, would have such a sequence point.
At any rate, the moral is to AVOID this kind of thing!
cp: gcc/g++ 3.4.2 (under Dev-C++)