{ %NORUN } program tw22790b; {$MODE DELPHI} type TPredicateMethod = function (const x: TOperand): Boolean of object; TWrapper = class strict private type POperand = ^TOperand; TDereferencingAdapter = class function F(const x: POperand): Boolean; end; public procedure Z; end; function TWrapper.TDereferencingAdapter.F(const x: POperand): Boolean; begin end; procedure TWrapper.Z; var pred: TPredicateMethod; begin with TDereferencingAdapter.Create do begin pred := F; { Error: Incompatible types ... } Free; end; end; begin end.