Evaluation order of index expressions

Timon Gehr via Digitalmars-d digitalmars-d at puremagic.com
Mon May 25 13:13:53 PDT 2015


On 05/25/2015 10:02 PM, Daniel Murphy wrote:
> "Timon Gehr"  wrote in message news:mjvtqm$17d8$1 at digitalmars.com...
>
>> A related issue is that the rewrites documented at
>> http://dlang.org/operatoroverloading.html don't all preserve the order
>> of subexpressions. However, ideally, the order of evaluation would be
>> preserved.
>
> As operator overloading is defined in terms of lowering to function
> calls, I think it's reasonable to decide the order of evaluation after
> the lowering. This will still be consistent across compilers and
> platforms.

But almost entirely arbitrary.

> Preserving the original order would require added complexity
> that I don't think is warranted.

The compiler would just need to introduce some temporary variables for 
the two lowerings. Why wouldn't this be warranted to make overloaded 
operators consistent with built-in ones? If anything, I think it is 
desirable to have opBinary(B) on type A and opBinaryRight(A) on type B 
interchangeable.

What complexity are you worried about?


More information about the Digitalmars-d mailing list