Outside array bounds
Alex
sascha.orlov at gmail.com
Sat Jul 7 08:30:40 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
Ok, the problem here is, that as args (and especially its length)
are known at compile time, args are checked for having enough
length in all cases of the run time parameter.
My question would be, why do you need the ID string, if you know
what to print from the length of args?
´´´
void process2(T ...)(string ID, T args)
{
static if(args.length == 1)
{
if (ID == "I1")
{
writeln(args.length, "\t", args[0]);
}
}
else static if(args.length == 2)
{
if (ID == "I2")
{
writeln(args.length, "\t", args[1]);
}
}
}
void main()
{
string S1 = "Test1", S2 = "Test2", ID1 = "I1", ID2 = "I2";
int Size = 1;
process2(ID1, S1);
process2(ID2, S2, Size);
}
´´´
More information about the Digitalmars-d-learn
mailing list