How to alias

kyle kyle at kyle.kyle
Fri Jan 14 17:48:41 UTC 2022


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


More information about the Digitalmars-d-learn mailing list