{$mode objfpc}{$H+} type generic TGListItem = class(TObject) public FNext: TGListItem; procedure Assign(Source: TGListItem); end; procedure TGListItem.Assign(Source: TGListItem) begin FNext := Source; end; type TIntListItem = specialize TGListItem; var A, B: TIntListItem; begin A := TIntListItem.Create; B := TIntListItem.Create; A.Assign(B); if A.FNext <> B then halt(1); end.