Variadic function not recognizing static array length

Zach the Mystic reachzach at gggggmail.com
Tue Mar 12 16:10:19 PDT 2013


On Tuesday, 12 March 2013 at 21:47:02 UTC, Zach the Mystic 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?

I'm just going to assert at runtime instead of at compile time.
assert(args[0].length == 2);

That's a good workaround, only a minor inconvenience it can't be 
caught at compile time.


More information about the Digitalmars-d-learn mailing list