{ %NORUN } program tw22790a; {$MODE DELPHI} type TBinaryRelationMethod = function (const a, b: TOperand): Boolean of object; TWrapper1 = record class procedure Sort(lessThan: TBinaryRelationMethod); static; end; TWrapper2 = class strict private type POperand = ^TOperand; TDereferencingAdapter = class function LessThan(const a, b: POperand): Boolean; end; public procedure Sort; end; class procedure TWrapper1.Sort( lessThan: TBinaryRelationMethod); begin end; function TWrapper2.TDereferencingAdapter.LessThan( const a, b: POperand): Boolean; begin end; procedure TWrapper2.Sort; begin with TDereferencingAdapter.Create do begin TWrapper1.Sort(LessThan); { Error: Incompatible types ... } Free; end; end; begin end.