While working on a library built for high efficiency, avoiding unnecessary copies of structs became an issue. I had assumed that `in` was doing this, but a bit of experimentation revealed that it does not. However, `ref in` works great.

My question is, should `in` by default also imply `ref` for value types like structs? Is there a reason not to do this?

This is the test program I used for reference:

```
import std.stdio;

struct Bob {
    int a;
    this(this) {
      writeln("<Bob copied>");
    }
}

void main()
{
    Bob b = Bob(3);
    writeln("                &b = ", &b);
    void showAddrIn(in Bob b) {
        writeln("(showAddrIn)    &b = ", &b);
    }
    showAddrIn(b);
    void showAddrRefIn(ref in Bob b) {
        writeln("(showAddrRefIn) &b = ", &b);
    }
    showAddrRefIn(b);
}
```

The output is as follows:

```
                &b = 7FFD9F526AD0
<Bob copied>
(showAddrIn)    &b = 7FFD9F526AB0
(showAddrRefIn) &b = 7FFD9F526AD0
```

Reply via email to