[fpc-devel] Black List of examples that FPC won't compile.
Hans-Peter Diettrich
DrDiettrich1 at aol.com
Wed Jan 29 08:10:59 CET 2014
Maciej Izak schrieb:
> Following by current logic, this example should not compile:
>
> ------begin code------
> TA = class
> procedure Foo;
> end;
>
> TB = class(TA)
> procedure Foo(A: Integer = 0); overload;
> end;
>
> var
> b: TB;
> begin
> b := TB.Create;
> b.Foo; // should raise Error: Can't determine which overloaded
> function to call
> end;
> ------end code------
Delphi (XE) has no problem with this code, even if TA.Foo also is
declared "overload", or both are declared Foo(). The static type (b:TB)
determines which static method to call.
> Returning to the example from bugtracker
> (http://bugs.freepascal.org/view.php?id=25607):
> FPC don't recognize at TB level that the TObject.Create was hidden on
> the TA level by
>
> constructor Create(A: Integer = 0); virtual; overload;
Delphi here requires
constructor Create(A: Integer = 0); overload; virtual;
Delphi seems to search for overloaded methods only in the same class.
Otherwise an error "Previous declaration ... not marked 'overload'"
would occur since TObject.Create was not marked 'overload'. Tested with
declarations in the same class:
constructor Create;
constructor Create(A: integer);
where *both* must be marked 'overload'.
Only if there is no matching method in a class, the ancestors are
searched as well. I.e. Delphi does not *hide* inherited methods, it only
extends the search into ancestors *when required*, regardless of
'overload' directives.
DoDi
More information about the fpc-devel
mailing list