On Monday, 25 May 2015 at 07:33:49 UTC, ketmar wrote:
On Sun, 24 May 2015 19:30:52 +0000, kinke wrote:

So for the 2nd assignment's left-hand-side, the index is evaluated before evaluating the container! Please don't tell me that's by design.
:>

it is. at least this is what i was told when i faced the similar issue.
"WONTIFX, STFU".

To be fair, the example that the OP gave is almost the same thing as

foo(++i, ++i);

whereas what you came up with had a lot more layers to it, with whole chains of function calls affecting each other. With the kind of example you came up with, even with defining the evaluation as strictly left-to-right, you would _still_ run into screwy problems with stuff easily being mutated in a different order than you expected.

Defining the order of evaluation as being strictly left-to-right will avoid some of the common bugs cause by folks foolishly doing something like

foo(++i, ++i);

but the reality of the matter is, if you start doing stuff like mutating the arguments inside of the function inside of the function when the same arguments are being passed to other functions in the same expression, you _will_ have weird and unexpected stuff happening. It might be completely well-defined and consistent, but it may not be what you expect, and even if it is, a slight change to the code could change the order. So, the kind of stuff that you're complaining about not being able to do really shouldn't be done regardless of how well-defined the order of evaluation is. It's just begging for trouble.

- Jonathan M Davis

Reply via email to