[fpc-pascal] overload question (variant vs enum subrange)
Martin Frb
lazarus at mfriebe.de
Sun Jan 26 20:48:42 CET 2014
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