Sorry, I sent the message prematurely :( Anyway, here's complete:

Is there a way to make compound assignment operators (-=, +=, *= and
friends) work with D's operator overload regime? I can't make them work.

struct Foo
{
    this( int bar ) {
         bar = bar;
    }

    Foo opBinary(string op)( in typeof(this) rhv )
    if( op == "+=" )
    {
         _bar += rhv._bar;
         return this;
    }

    private int _bar;
}

void main()
{
    auto f1 = Foo(1);
    auto f2 = Foo(2);
    f2 += f1;

I get the following compiler error:

Error: 'f1' is not a scalar, it is a Foo
Error: 'f1' is not of arithmetic type, it is a Foo
Error: 'f2' is not of arithmetic type, it is a Foo

Is there a way to make this work? Even changing the operator string in opBinary to "-" doesn't do nothing. Or those kind of operators can't be overloaded?

--
Yao G.

Reply via email to