On Friday, 25 September 2015 at 02:37:22 UTC, TheGag96 wrote:
What's the problem here? I SWEAR I've passed arrays by reference before just like this. Thanks guys.

I'm seeing the same error, but I haven't yet determined why. At any rate, this works:

```
import std.stdio;

void append(ref int[] arr, int val) {
    arr ~= val;
}

void main() {
    auto a1 = [10,20,30];
    a1.append(40);
    writeln(a1);
}
```

The compiler error aside, there's a big difference between this function and your quicksort. This one is modifying the structure (or metadata) of the source array. Your quicksort is only dealing with the elements. You don't need to use ref to effect changes on the elements of the source array. arr[1] = 2 on a function parameter will be reflected in the source array even when ref is absent. Only when you need to modify the length of the source array, or cause it to point to a new memory block, would you need to use ref.

So in your particular case, you can drop the ref from your parameter and the compiler error will go away. However, the function as written is producing a range violation :)

I'd still like to know what's causing the compiler error with ref in this case, though.

Reply via email to