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. 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'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"?

In any case, "http://dlang.org/operatoroverloading.html"; needs to be updated

Reply via email to