My understanding is that, as per spec, a += k is rewriten as :

a = cast(typeof(a)) (a + k);

Which make our example looks like :

a = cast(typeof(a)) (a + a++);
a = cast(typeof(a)) (a + { auto olda = a; a++; return olda; }());

The whole damn thing should end up with newa == 2 * olda . This is what SDC does. DMD tells me newa == 2 * olda + 1, as it evaluate a++ before that the value of a for the sum.

I though we decided to do everything LTR, but discussing with Andrei, it seems that Walter oppose this in some special cases. I think we should keep it consistent and do LTR all the way down.

Relevant bug report: https://issues.dlang.org/show_bug.cgi?id=14364

Reply via email to