On Wednesday, 5 January 2022 at 05:15:30 UTC, Paul Backus wrote:
On Wednesday, 5 January 2022 at 04:35:12 UTC, Tejas wrote:
```d
import std.stdio:writeln;

ref int func(return ref int a){
    a = 6; // modifies a as expected
    return a;
}
void main(){
    int a = 5;
    auto c = func(a); // I expected c to alias a here
    c = 10; // Expected to modify a as well
    writeln(a); // prints 6 :(
}
```

Local variables cannot be references, so when you assign the reference returned from `func` to the variable `auto c`, a copy is created.

To make this work the way you want it to, you must use a pointer:

```d
int a = 5;
auto p = &func(a); // use & to get a pointer
*p = 10;
writeln(a); // prints 10
```

The entire reason I wanted to get a `ref` was so that I can avoid the `*` :( Didn't know you could take the address of a function _invocation_ though, so asking this wasn't completely redundant

Thank you :D

Guess I'll be stuck with ol' `struct Ref(T){...}`

Reply via email to