If you want to have the "class of ..." construction, you need to add a constraint to your generic definition that the type will indeed be a class:
type generic TGMyList<_T: TObject> = class
type TTClass = class of T;
end;
But for what you are proposing, you don't need the class-of syntax. Class of gives you the type of the class type, which is useful for doing runtime level polymorphism over class types (e.g. calling virtual constructors).
But this only makes sense if you want to default to a common base class, which you do not have in your example. I think you are mixing things up here. Generics as you are using them are completely compile time and static while the "class of" mechanism is a runtime feature allows dynamic polymorphism