uses System.SysUtils, System.Variants;
//a Variant parameter takes a value
//of any type
function GetSum(const A, B: Variant): Variant;
begin
if VarIsNumeric(A) and VarIsNumeric(B) then
Result := A + B
else
Result := VarToStr(A) + VarToStr(B);
end;
var
IntSum, StrSum, IntStrSum: Variant;
begin
IntSum := GetSum(5, 6);
//IntSum is 11
StrSum := GetSum('A', 'BC');
//StrSum is 'ABC'
IntStrSum := GetSum(5, '6');
//IntStrSum is '56'
WriteLn('intSum is ', VarToStr(IntSum));
WriteLn('strSum is ''',
VarToStr(StrSum), '''');
WriteLn('intStrSum is ''',
VarToStr(IntStrSum), '''');
end.