Nathan M. Swan:
The correct keyword is "opBinary", not "opbinary".
The compiler must give an error message easy to understand in
similar wrong cases.
http://dpaste.1azy.net/b73ef2cd
This is your code:
Arithmetic opbinary(string op)(Arithmetic rhs)
{
static if(op == "+") return add(rhs);
static if(op == "*") return mul(rhs);
else static assert(0, "Operator "~op~" not implemented");
}
I like to add template constraints, where possible:
Arithmetic opbinary(string op)(Arithmetic rhs)
const pure nothrow if (op == "+" || op == "*")
Bye,
bearophile