I'd like to make this work s += 10 where s is a struct. How can I do that?
this isn't working:

    auto ref opAssign(string op, T)(T value)
    if(op == "+")
    {
        m += value;
        return this;
    }

the compiler didn't consider that overload and return:

d.d(34): Error: s is not a scalar, it is a S

full code:

    auto s = S(10);
    writeln(--s);
    s += 5;
    writeln(s);

struct S
{
    int m;

    int opUnary(string op)()
    {
        static if(op == "--")
            return --m;
        else static if(op == "++")
            return ++m;
        else
            static assert(0, "unsupported operator");
    }

    void opBinary(string op, R)(const R rhs)
    if(op == "+")
    {
        m += rhs;
        return this;
    }

    auto ref opAssign(string op, T)(T value)
    if(op == "+")
    {
        m += value;
        return this;
    }
}


Reply via email to