Automatic translation of opUnary!"++" into opOpAssign!"+"
Ali Çehreli via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Sat Sep 6 19:08:15 PDT 2014
On 12/28/2013 11:00 AM, monarch_dodra wrote:
> On Saturday, 28 December 2013 at 15:37:06 UTC, Francesco Cattoglio wrote:
>> So, while I was studying the apropriate template constraints for my
>> shiny new iota implementation, I found out this funny thing:
>>
>> import std.stdio;
>>
>> class Test{
>> int x = 41;
>> Test opOpAssign(string op)(int rhs) if (op == "+") {
>> x += rhs;
>> return this;
>> }
>> }
>>
>> void main() {
>> Test t1 = new Test;
>> //class Test has no opUnary defined, so the following
>> //gets automagically converted into (t1) += (1)
>> ++t1;
>> writeln(t1.x); //prints 42, correct!
>> }
>>
>> This actually comes really handy, but I couldn't find it into the
>> language documentation on dlang.org, so it surprised me.
Same here. I still can't find it in the documentation at least easily.
>> Did I miss it in the language specification? Should we add it
>> somewhere to the docs?
>> Anyone with some spare time care to explain briefly what was the
>> rationale behind this?
>
> I seem to remember that this is mentioned in TDPL? That's not spec of
> course, but I think it's mentioned here.
I just checked again. No, I can't find it in TDPL.
> I'm a bit fuzy about the shortcuts, but I *think* there are a couple
> other shortcuts like this, such as "a += b" => "a = a + b"?
No, that translation is not there.
> In any case, "http://dlang.org/operatoroverloading.html" needs to be
> updated
Agreed.
Can someone who is familiar with the dmd source code enumerate such
translations?
Thank you,
Ali
More information about the Digitalmars-d-learn
mailing list