Normally, if I refer to a type then the first type found by the name will be taken => and if that type is not compatible, then I get an error.
=> See Example 2

But, if I try to specialize a generic, and some other type by the same name exists, and comes first in the search order, then it will be ignored.

The specialize below, ignores the "TFoo = class"  which can not be used, and finds the TFoo from unit1.

Is that intended?


unit Unit1;{$mode ObjFPC}
interface
type
  generic TFoo<a> = class F: A; end;
implementation
end.



program Project1;{$Mode objfpc}
uses Unit1;
type
  TFoo = class end;
  //TFoo = word;
  TBar = specialize TFoo<byte>;  // Works, ignores the class (or word) TFoo
begin
end.


############# Example 2  ##############


unit Unit1;{$mode ObjFPC}
interface
type
TFoo = class end;   // TFoo that could be base class
implementation
end.


program Project1;{$Mode objfpc}
uses Unit1;
type
  TFoo = word;
  TFoo2 = class(TFoo) end;  // <<<<<< Fails / does not see the class TFOO

begin
end.

_______________________________________________
fpc-devel maillist  -  [email protected]
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

Reply via email to