On Monday, 31 March 2014 at 15:51:03 UTC, Justin Whear wrote:
Trying to insult me isn't going to make you right, nor will an appeal to unicorns. With a well-defined order-of-operations, this might be correct
behavior;

Actually, regardless of order of operation, specs says you still get "i" un-incremented, since opEquals's lhs has no side effects anyways.

...The only way to have some other result, is if there was some sort of undefined behavior in the statement, at which point there is no more concept of "correct behavior"

in this case I suspect D is like C and that this is undefined
behavior

Yup. It's undefined behavior. I replied too fast and missed it.

thus I would support making this statement illegal or at least
warning.

The issue is that the legality of this can't be checked at the semantic phase.

It depends on *who* the left and right hand sides are. It's obvious in "i = i++;", but if you start mixing function calls, references and whatnot, the line becomes more blurry:

//----
int i;
auto p = &i;
*p = i++; //Legal? Illegal?
//----

So this means making it illegal is out of the question.

As for making it a warning, well, Walter is (AFAIK) pretty much against having any warnings at all, short of straight up deterministic semantic warnings "dangling else"/"deprecation".

Reply via email to