Initialize static array without explicit length

Simen Kjærås simen.kjaras at gmail.com
Mon Dec 3 10:00:31 UTC 2018


On Monday, 3 December 2018 at 09:51:45 UTC, Andrey wrote:
> Hi,
> I want to create a static array and immediately init it with 
> values:
>> uint[xxxxx] data = [1,3,10,44,0,5000];
>
> I don't want to set the length of it explicitly (xxxxx in 
> square brackets). I want that compiler itself counted number of 
> values (in example it is 6).
>
> What should be a right syntax?

There's no special syntax for this (even though it's been 
requested numerous times). However, it's easy to implement in a 
library:

import std.traits : CommonType;

CommonType!T[T.length] staticArray(T...)(T args)
if (is(CommonType!T))
{
     return [args];
}

unittest {
     auto a = staticArray(1,2,3,4);
     static assert(is(typeof(a) == int[4]));
}

--
   Simen


More information about the Digitalmars-d-learn mailing list