{ %NORUN } { adjusted test by removing some "Lazarusisms" } program tw20836; {$mode objfpc}{$H+} type generic TGObjectChangeCommand<_T>=object private DoData,UnDoData:_T; method:tmethod; public procedure UnDo;virtual; end; TCommand=specialize TGObjectChangeCommand<Integer>; procedure TGObjectChangeCommand.UnDo; type TCangeMethod=procedure(const data:_T)of object; begin TCangeMethod(method)(UnDoData); end; begin end.