Variadic function not recognizing static array length

Steven Schveighoffer schveiguy at yahoo.com
Thu Mar 14 09:09:30 PDT 2013


On Tue, 12 Mar 2013 17:47:00 -0400, Zach the Mystic  
<reachzach at gggggmail.com> wrote:

> void func(string[2] a) {}
>
> void func2(T...)(T args) {
>     static assert(is(typeof(args[0]) == string[2]));
> }
>
> void func3(T...)(T args) {
>     static assert(args[0].length == 2);
> }
>
> func(["",""]); // Okay
> func2(["",""]); //  Error: (is(string[] == string[2LU])) is false
> func3(["",""]); // Error: _param_0 cannot be read at compile time
>
> Is this the intended design? Is there a workaround which allows me to  
> ensure that the parameter is exactly 2 length?

Actually an array literal's default type is a slice, not a fixed-sized  
array.  With IFTI, the type is decided by the call, not how you use it the  
parameters.

I filed an enhancement request a while back that would help fix this.

http://d.puremagic.com/issues/show_bug.cgi?id=4998

-Steve


More information about the Digitalmars-d-learn mailing list