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