My goal is to be able to overload the "++" operator transparently to the code, but I can't.

import std.stdio;

struct Arc {
   int I = 0;
   // This is void, but the error appears under all return types
   void opUnary(string op)() if( op == "++" ) {
      ++I;
   }
}

struct HasArc {
    Arc myArc;
}

void main() {
   HasArc has;
   writefln(" Arc.I = %s", has.myArc.I); // Arc.I = 0

   has.myArc++; // Error: var has no effect in expression (__pitmp1481)

   // Okay, try this instead:
   auto UselessVar = has.myArc++; // Works fine

   writefln(" Arc.I = %s", has.myArc.I); // Arc.I = 1
}

Obviously the expression has an effect. Bug? If not, what is the right way to have the "++" operator pass that error test?

Thanks, Zach

Reply via email to