// *** before: ***
// joining two dynamic arrays was written by hand: measure, resize, copy
var
A, B, C: TArray<Integer>;
I: Integer;
begin
SetLength(C, Length(A) + Length(B));
for I := 0 to High(A) do
C[I] := A[I];
for I := 0 to High(B) do
C[Length(A) + I] := B[I];
end;
// *** in version XE7: ***
var
A, B, C: TArray<Integer>;
begin
A := [1, 2, 3];
B := [4, 5];
C := A + B; // 1 2 3 4 5
C := C + [6]; // an array constant on the right
C := C + C; // and the array with itself
Writeln(Length(C));
end;