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
}
```

Reply via email to