1/2/2013 7:52 AM, bearophile пишет:
Era Scarecrow:

 Well I see that you have opIndexUnary twice; According to the manual
you wouldn't need as it would rewrite the code so you only need it once;

And as you have seen if you remove the useles opIndexRight the program
keeps compiling with no errors and keeps asserting at run-time:



struct Foo {
     int x;
     alias this = x;

Implicit conversion to int...

}

class Bar {
     Foo[] data;

     this() {
         data.length = 10;
     }

     Foo opIndex(uint i) {
         return data[i];
     }

     void opIndexUnary(string op)(uint i) if (op == "++") {
         data[i]++;

...and ++ somehow works with rvalue.

The fact that it's allowed is dangerous if you ask me.

     }
}

void main() {
     auto barfoo = new Bar;
     ++barfoo[3];
     assert(barfoo.data[3] == 1);
     barfoo[3]++;
     assert(barfoo.data[3] == 2);
}


Bye,
bearophile


--
Dmitry Olshansky

Reply via email to