// *** before: ***
procedure Sum(const A: TArray<Integer>);
var
I: Integer;
Item: Integer;
Total: Integer;
begin
Total := 0;
for I := Low(A) to High(A) do
Total := Total + A[I];
for Item in A do
Writeln(Item);
end;
// *** in version 10.3: ***
procedure Sum(const A: TArray<Integer>);
begin
var Total := 0;
for var I := Low(A) to High(A) do
Total := Total + A[I];
for var Item in A do // for-in takes its type from the array
Writeln(Item);
// I and Item live inside their loops only: a second loop below can
// declare its own I without a warning about a hidden name
end;