program tgenfunc12; {$mode objfpc} type TTest = class generic function Test: T; end; generic function TTest.Test: T; begin Result := T.Create; end; generic function Test: T; begin Result := TInterfacedObject.Create; end; var t: TTest; begin t := TTest.Create; t.specialize Test.Free; specialize Test; end.