I'm trying to use alias
in an operator overload to reduce typing, but what gets aliased is not what I expect. Tested in DMD v2.098.1-dirty on Windows plus whatever versions of DMD, GDC, and LDC I have installed on Linux. Thanks.
struct Broke
{
double num;
import std.traits : isNumeric;
Broke opBinary(string op, T)(T rhs) if (is(T : Broke) || isNumeric!T)
{
static if ( is(T : Broke))
{
alias b = rhs.num;
assert(&b != &this.num); //this fails
}
else
{
alias b = rhs;
}
static if (op == "+")
{
return Broke(num + b);
}
}
}
void main()
{
import std.stdio;
Broke foo = Broke(10);
Broke bar = Broke(20);
writeln(foo + 15); //prints 25 as expected
writeln(foo + bar); //prints 20
}