Array literals are weird.

evilrat evilrat666 at gmail.com
Sun May 2 05:57:02 UTC 2021


On Saturday, 1 May 2021 at 19:49:51 UTC, russhy wrote:
> On Saturday, 1 May 2021 at 12:22:50 UTC, evilrat wrote:
>> On Saturday, 1 May 2021 at 11:50:27 UTC, Adam D. Ruppe wrote:
>>>
>>> or you can use the library `.staticArray` thing to expressly 
>>> indicate your intention on the original foo
>>>
>>> foo([1,2,3].staticArray);
>>>
>>>
>>
>> Is there one in Phobos? Anyway this works, but maybe it can be 
>> made more type safe with constraints or just with improved 
>> symtax.
>>
>> ```d
>> // compiles with -vgc and -betterC (weird, also without import 
>> stdc.core.stdio)
>> import std.range : ElementType;
>>
>> template staticArray(alias T)
>> {
>> 	enum ElementType!(typeof(T))[T.length] staticArray = T;
>> }
>>
>> extern(C) void main()
>> {
>> 	import core.stdc.stdio;
>> 	auto arr = staticArray!([1,2,3]);
>> 	pragma(msg, typeof(arr)); // int[3]
>> 	foreach(i; arr)
>> 		printf("%d\n", i);
>> }
>> ```
>
>
> don't you realize something is weird?
>
> someone is asking to be able to do auto a = [1, 2, 3]
>
> and you propose a template?
>
> this is asking people to look for alternative language
>
> auto a = new[1,2,3]  <== this should be allocated array
> auto a = [1,2,3] <== this should be static array
>
> let's fix that, shall we? instead of telling people to bloat 
> their files with templates

You see only what you wanted to see.

Let me clarify something.
That code proves that unlike it was stated "array type 
information is gone" it actually isn't, which this code proves.
It provides workaround just is case.
I'm not forcing anyone to use it, and there is simpler solution 
(still a template one) in phobos.
And finally, I haven't said anything like "D DONT NEED THIS, STFU 
AND USE HACKS".

But after recent discussion you seem to trigger just by seeing my 
posts. No thanks I don't need any stalkers following me around.


More information about the Digitalmars-d mailing list