[Issue 6421] Require initialization of static arrays with array literals not to allocate

via Digitalmars-d-bugs digitalmars-d-bugs at puremagic.com
Sun May 4 04:10:06 PDT 2014


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

--- Comment #9 from rswhite4 at googlemail.com ---
(In reply to Andrej Mitrovic from comment #8)
> (In reply to Kenji Hara from comment #7)
> > But "length inference" on variable declaration is a useful syntax.
> > 
> > float[$] arr = [1, 2, 3];          // typeof(arr) == float[3]
> > auto[$] arr = [1.0f, 2.0f, 3.0f];  // ditto
> 
> What do you think about my extension to the new type construction syntax?:
> 
> float[3] arr = float[3]([1, 2, 3]);
> 
> I'm thinking it could be a more generic solution (more composable in
> template/generic code) since you could do things like:
> 
> -----
> float[3] arr;
> arr = float[3]([1, 2, 3]);
> -----
> 
> -----
> float[3] arr;
> arr = float[arr.length]([1, 2, 3]);
> -----
> 
> -----
> float[3] arr;
> arr = typeof(arr)([1, 2, 3]);
> -----
> 
> -----
> int[] arr;
> arr.length = 3;
> arr[] += int[3]([1, 2, 3];
> arr[] += int[3]([1, 2, 3];
> assert(arr == [2, 4, 6]);
> -----
> 
> -----
> void foo(Arr)(ref Arr arr) if ( isStaticArray!Arr) { }
> void foo(Arr)(Arr arr)     if (!isStaticArray!Arr) { }
> foo(int[2]([1, 2]));  // explicitly pick overload
> -----
> 
> And things like that.

I would prefer float[3](1, 2, 3) instead of float[3]([1, 2, 3]). The latter has
too many parentheses.

--


More information about the Digitalmars-d-bugs mailing list