Possible 'pure' bug with int[] slice. Programming in D page 174

Brother Bill brotherbill at mail.com
Sat Oct 4 10:56:09 UTC 2025


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]
```


More information about the Digitalmars-d-learn mailing list