[fpc-devel] Fwd: overload question (variant vs enum subrange)

Martin Frb lazarus at mfriebe.de
Mon Mar 31 15:32:09 CEST 2014


Just asking this again, as I did not get any answer yet?

Is that the indented behaviour, and if so what is the reasoning for it?


-------- Original Message --------
Subject: 	overload question (variant vs enum subrange)
Date: 	Sun, 26 Jan 2014 19:48:42 +0000
From: 	Martin Frb <lazarus at mfriebe.de>
To: 	FPC-Pascal users discussions <fpc-pascal at lists.freepascal.org>



TFoo1  is a sub range of  FFoo

And it seems to match both TFoo and variant.
> project1.lpr(24,3) Error: Can't determine which overloaded function to
> call
> project1.lpr(15,11) Hint: Found declaration: Bar(TFoo);
> project1.lpr(11,11) Hint: Found declaration: Bar(Variant);

No other type seems to be bothered by variant.
Also variant is the only type, that I found that conflicts with TFoo1

Why?

I know I can declare
   procedure Bar(a: TFoo1); overload;
and it will solve it (even if I leave all the others, because it is an
exact match).

But why does a subrange of integer/byte work? Subrange of integer does
not give the error, even so it could match both.



program Project1;
{$mode objfpc}
{// $mode delpti}
type
   TFoo = (a1,a2,a3,a4,a5);
   TFoo1 = a2..a4;
   TFoo2 = 1..3;
   TFoo3 = byte(1)..(3);


procedure Bar(a: Variant); overload;
begin   end;
procedure Bar(a: Integer); overload;
begin   end;
procedure Bar(a: TFoo); overload;
begin   end;

var
   f1: TFoo;
   f2: TFoo1;
   f3: TFoo2;
   f4: TFoo3;
begin
   Bar(f2);
end.



-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-devel/attachments/20140331/527e198f/attachment.html>


More information about the fpc-devel mailing list