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