On Sun, 25 Feb 2018, Bart wrote:

On Sun, Feb 25, 2018 at 5:01 PM, Jonas Maebe <jo...@freepascal.org> wrote:

As Michael said, overloads are selected at compile time. This is true for
both FPC and Delphi. We even have over a 100 unit tests that we ran under
Delphi to reverse engineer their selection priorities in case of variants:
https://svn.freepascal.org/svn/fpc/trunk/tests/test/cg/variants/

Abs(), however, gets a forced conversion to float in Delphi:
https://bugs.freepascal.org/view.php?id=20551

Hmm, did not find that one (I searched bugtracker before posting here).


Seems you are right:

Delphi Tokyo 10.2

X = -1
VarIsFloat : FALSE
VarIsNumeric: TRUE
VarIsOrdinal: TRUE
After Abs()
X = 1
VarIsFloat : TRUE
VarIsNumeric: TRUE
VarIsOrdinal: FALSE

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.

Michael.
_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

Reply via email to