In Delphi mode, the record type restrictions will also allow the use of simple types:
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;
TIntList = TList<Integer>;