unit ugeneric99; {$mode objfpc}{$H+} {$modeswitch advancedrecords} interface type generic TTest = class type TTestT = specialize TTest; end; TTestRec = record f: LongInt; type generic TTest = class type TTestClass = class end; end; generic TTestArray = array of T; var t: specialize TTest.TTestClass; end; TTestClass = class type generic TTest = class type TTestRec = record f: LongInt; end; end; generic TTestArray = array of T; var t: specialize TTest.TTestRec; end; generic TTestArray = array of T; implementation end.