Well, you can do the following, adding one extra array element, like:
{$mode objfpc}{$R+}
uses sysutils,math;
var
i:integer = -1;
a:array of integer = ({index 0 is the default}0,6,7,8,9,10);
t:Boolean;
begin
writeln(a[ifthen(inrange(i,0,high(a)),i,0) ]);
i:=10;
writeln(a[ifthen(inrange(i,0,high(a)),i,0) ]);
end.
and the range error disappears .
A similar trick can be done with EnsureRange.