On Monday, 16 June 2014 at 11:54:27 UTC, Daniel Murphy wrote:
Couldn't "array dimension" be either in bytes or in T units, for a T[]? It seems to be in bytes (I had assumed it was in T units). If you agree that it is ambiguous, please tweak the description to be more precise.

It _is_ in T units. It is exactly the dimension of the array, not the size in memory.

Ah, OK. I was mislead by the following:

        1: int[] a1 = [42];
        2: ubyte[] a2 = cast(ubyte[]) a1;
        3: writeln(a2);

I thought line 2 did a reinterpret_cast on the a1 array header (length + ptr), so I expected a2 == [42], but it is equal to [42, 0, 0, 0] (casts the array contents, adjusts the array length). Forcing a reinterpret_cast-style cast shows that indeed length is in T units, as I originally expected:

        int[] a1 = [42];
        void* p = &a1;
        ubyte[] a2 = *cast(ubyte[]*) p;
        assert(a2 == [42]);

Reply via email to