Re: std.array: array, ulong and Win32

2015-08-10 Thread Steven Schveighoffer via Digitalmars-d-learn

On 8/9/15 4:40 PM, ixid wrote:

On Sunday, 9 August 2015 at 20:33:10 UTC, anonymous wrote:

On Sunday, 9 August 2015 at 20:13:38 UTC, ixid wrote:



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


It seems like bearophile beat me to it. Good to see he's still alive.

https://issues.dlang.org/show_bug.cgi?id=14832


PR: https://github.com/D-Programming-Language/phobos/pull/3544

-Steve


std.array: array, ulong and Win32

2015-08-09 Thread ixid via Digitalmars-d-learn
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	


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


Re: std.array: array, ulong and Win32

2015-08-09 Thread Timon Gehr via Digitalmars-d-learn

On 08/09/2015 10:13 PM, 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.d516
...


I consider this to be a bug. Also, it's annoying static assert abuse.


And while I'm here why do arrays not implicitly cast?


Array literals do cast implicitly.


ulong is happy to accept uint values but ulong[] will not accept uint[].


Many reasons. E.g. it would be a hidden not-necessarily-constant-time 
operation.


Re: std.array: array, ulong and Win32

2015-08-09 Thread anonymous via Digitalmars-d-learn

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.


Re: std.array: array, ulong and Win32

2015-08-09 Thread ixid via Digitalmars-d-learn

On Sunday, 9 August 2015 at 20:33:10 UTC, anonymous wrote:

On Sunday, 9 August 2015 at 20:13:38 UTC, ixid wrote:



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


It seems like bearophile beat me to it. Good to see he's still 
alive.


https://issues.dlang.org/show_bug.cgi?id=14832