[fpc-devel] Abs(Variant) unexpected result

Bart bartjunk64 at gmail.com
Sun Feb 25 22:43:33 CET 2018


On Sun, Feb 25, 2018 at 5:34 PM, Michael Van Canneyt
<michael at freepascal.org> wrote:

>> So, would it be possible to have an overloaded Abs(V: Variant):
>> Variant; function in the variants unit?
>
>
> I advise against it.
>
> S : String;
>
> begin
>   S:='My very nice string';
>   S:=Abs(S);
> end;
>
> Will then compile and give a run-time error, as opposed to a compile-time
> error now.


Suggestion from the forum:
function Abs(var V: Variant): Variant; overload;
begin                                        ;
  If (VarIsNumeric(V)) then
  begin
    if V< 0 then
      Result := -V
    else
      Result := V
  end
  else
   Raise EVariantBadVarTypeError.Create(SomeMessage);
end;

While this will give hints if you did not initialize V, it will not
let you compile Abs(AString).

Bart



More information about the fpc-devel mailing list