@Thaddy's post does not cover my second example (without using additional type for list). But Ok, my bad.
I
explicitly didn't add an example for that, because I don't like such syntax (in either generics mode). The code is much cleaner with the extra type declaration and also better maintainable: it hides the code from cryptic generics declarations on vars. If you subsequently want to replace a generics derived class with a non-generic one or another generics derived one, the code itself does not change!
The code itself is then completely free of generics handling. These are all in a type block. This is actually how it is supposed to be used. Declaring generics on vars directly is in most cases collateral damage and bad coding style.
In the mean time look at the last part of my example: all 4 examples I gave lead to the same var declaration, so it is transparent.
By using a proper type declaration it does not matter much if the code uses FGL or generics.collections or mode objfpc or mode delphi...
You probably see now why I used a cleaner coding style as compared to using generics straight on the var: such code will become easily convoluted e.g. by a library change or a mode change or even deriving TFieldRenameList from the non-generic TObjectList in the cntnrs unit. All the code stays the same (create, free, add, delete, IndexOf, Sort, etc), except for features that are not common to all those classes mentioned or have a slightly different name.
To me, that is important. It also enables me to write examples on this forum that cover both types of generics syntax with ease.