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