[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