On Wednesday, 16 July 2025 at 13:29:01 UTC, z wrote:
I also see this in the language documentation :
```
A void array cannot be indexed.
```
But i can slice it just fine in DMD 2.111...

Is this by design or is there a hole in the language specification?

The sentence before says:

Array indices in slicing operations are interpreted as byte indices

And the example shows slicing:
```d
void[] arr = data1; // OK, int[] implicit converts to void[].
...
arr[0..4] = [5]; // Assign first 4 bytes to 1 int element
```

Slicing a void array is useful as it can refer to multiple bytes. Indexing a void array is not really useful because if the array is only holding bytes, then why not use byte[] instead? If it's not a byte, then indexing it is probably wrong anyway (either by design, or because dealing with a single byte at a time is inefficient).

By extension what the differences between `void`, `ubyte`, `void[]`, `ubyte[]` really? The language documentation doesn't appear to be explaining everything.
Thanks in advance

The docs explain the difference between the two array types. Perhaps there should be an entry for `void` in the types page. A `void` value cannot be accessed. `void.sizeof` is 1 so that a void array can have length equivalent to the number of bytes in the array.

Reply via email to