Did I discover a bug, or am I misunderstanding intentional behavior?
I would not expect a 'pure' function to modify a parameter.

```
void main()
{
        import std.stdio : writeln;

        int[] numbers = [5, 6, 7, 8, 9];
        writeln("numbers before: ", numbers);
        writeln("inner(numbers): ", inner(numbers));
        writeln("numbers after : ", numbers);
}

int[] inner(int[] slice) pure
{
        // This should not be pure.  I broke purity by mutating slice[0]
        // D compiler is not catching this!
        slice[0] = 500;

        if (slice.length)
        {
                --slice.length;
                if (slice.length)
                {
                        slice = slice[1 .. $];
                }
        }
        return slice;
}
```

Output of console:
```
numbers before: [5, 6, 7, 8, 9]
inner(numbers): [6, 7, 8]
numbers after : [500, 6, 7, 8, 9]
```

Reply via email to