[fpc-pascal] overload question (variant vs enum subrange)

Martin Frb lazarus at mfriebe.de
Sun Feb 2 14:44:37 CET 2014


Anybody?

Is this designed? Or is this a bug? Shall I put it on Mantis?

On 26/01/2014 19:48, Martin Frb wrote:
> 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.
>




More information about the fpc-pascal mailing list