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.