std.array: array, ulong and Win32

anonymous via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sun Aug 9 13:33:09 PDT 2015


On Sunday, 9 August 2015 at 20:13:38 UTC, ixid wrote:
> This seems like a reasonable use but errors, obviously I can do 
> it in many other ways:
>
>     ulong[] result = iota(1UL, 10UL).array;
>
>
> Error: static assert  "Argument types in (ulong) are not all 
> convertible to size_t: 
> (ulong)"	C:\D\dmd2\src\phobos\std\array.d	516	

Yup, bug. Please file an issue at <http://issues.dlang.org/>.

> And while I'm here why do arrays not implicitly cast? ulong is 
> happy to accept uint values but ulong[] will not accept uint[].

That's because the offsets of the elements are different. Reading 
a ulong means reading 8 bytes. But in a uint[] every element only 
takes up 4 bytes. So every 2 uint elements would be combined into 
one ulong. And if the uint[] doesn't have an even number of 
elements, you'd read beyond array bounds.

You can do that conversion explicitly, but for an implicit 
conversion that would be too surprising.


More information about the Digitalmars-d-learn mailing list