Outside array bounds

Timoses timosesu at gmail.com
Sat Jul 7 08:24:21 UTC 2018


On Saturday, 7 July 2018 at 08:09:51 UTC, vino.B wrote:
> Hi All,
>
>   Request you help, on the below code
>
> import std.stdio: writeln;
>
> void process(T ...)(string ID, T args) {
> if (ID == "I1") { writeln(args.length, "\t", args[0]); }
> else if (ID == "I2") { writeln(args.length, "\t", args[1]);}
> }
>
> void main() {
> string S1 = "Test1", S2 = "Test2", ID1 = "I1", ID2 = "I2";
> int Size = 1;
> process(ID1, S1);
> process(ID2, S2, Size);
> }
>
> Error:
> Test.d(5): Error: array index [1] is outside array bounds [0 .. 
> 1]
> Test.d(11): Error: template instance `Test.process!string` 
> error instantiating
>
> From,
> Vino.B

Interesting.. Looks like the compiler does some boundschecking 
during compile time. You could circumvent this:


     void process(T ...)(string ID, T args) {
         if (ID == "I1") { writeln(args.length, "\t", args[0]); }
         static if (T.length > 1) // only add below code if cond. 
true
             if (ID == "I2") { writeln(args.length, "\t", 
args[1]);}
     }

Oddly, when leaving out the "static if" statement, the error 
still occurs when compiling with "-release" or with 
"-boundscheck=off"... I thought those would/should disable bounds 
checking at compile time???


More information about the Digitalmars-d-learn mailing list