ref struct member function

PinDPlugga a at a.com
Thu May 13 19:21:42 UTC 2021


Hi I am working through Programming in D. In one exercise I have 
a helper function in a struct

```D
struct Fraction {
     auto n = 0L;
     auto d = 1L;

     // ... other bits ...

     ref Fraction reduce() {
       import std.numeric : gcd;

       v = gcd(n, d);
       if (v > 1) {
         n /= v;
         d /= v;
       }

       return this;
     }

     // ... etc ...
}

void main() {
   import std.stdio : writeln;
   auto f = Fraction(3, 9);
   writeln(f.reduce());
}
```

This works but issues a deprecation warning:
```
onlineapp.d(30): Deprecation: returning `this` escapes a 
reference to parameter `this`
onlineapp.d(30):        perhaps annotate the parameter with 
`return`
Fraction(1, 3)
```

I found several other ways to make this work without the 
warnings, but I am wondering how to make this particular case 
work, or if it is not a recommended way, what the proper way 
would be.


More information about the Digitalmars-d-learn mailing list