operator overloading compilation error

bearophile bearophileHUGS at lycos.com
Tue Jul 26 05:12:51 PDT 2011


Diego Canuhé:

> I'm trying to overload the "+" and "-" operators for a struct  but I get
> this error
> 
> test.d(47): Error: incompatible types for ((v1) - (v2)): 'Vecf!(1u)' and
> 'Vecf!(1u)'
> (the line corresponds to the last assert)

It's a dmd bug, and I think it's already in Bugzilla. This is workaround code:


struct Vecf(uint n) {
    float x;
    Vecf opBinary(string op)(Vecf other) if (op == "+" || op == "-") {
        mixin("return Vecf(this.x " ~ op ~ " other.x);");
    }
}

void main() {
    alias Vecf!1 V;
    auto v1 = V(3f);
    auto v2 = V(5f);
    auto r = V(-2f);
    assert ((v1.opBinary!"-"(v2)) == r); // better to use an approximate ==
    assert ((v1 - v2) == r); // better to use an approximate ==
}

Bye,
bearophile


More information about the Digitalmars-d-learn mailing list