In Delphi mode, the record type restrictions will also allow the use of simple types:
Type
TList<_T : record> = class(TObject)
public
Type TCompareFunc = function(const Item1, Item2: _T): Integer;
Public
data : _T;
procedure Add(item: _T);
procedure Sort(compare: TCompareFunc);
end;
TIntList = TList<Integer>;
The restriction is enforced when specializing the type. That means that the mode active when
specializing a type determines whether a simple type can be used or not: if the restriction to record
was compiled using ObjFPC mode, code written in Delphi mode can specialize it with a simple
type anyway.
for example:
unit tg;
interface
{$mode objfpc}
Type
generic TList<_T : record> = class(TObject)
public
Type TCompareFunc = function(const Item1, Item2: _T): Integer;
Public
data : _T;
procedure Add(item: _T);
procedure Sort(compare: TCompareFunc);
end;
implementation
generic procedure TList<_T>.Add(item: _T);
begin
end;
generic procedure TList<_T>.Sort(compare: TCompareFunc);
begin
end;
end.
can be used in {$MODE Delphi} for:
{$mode delphi}
uses tg;
Type
TIntList = TList<Integer>;
begin
end.