How about iterations through lists? Like TList and TStrings and descendants. Is it it somehow possible to use the IN keyword there?
Provided the list has an enumerator (of type TEnumerator) you can iterate using the Object Pascal "for x in list_of_x do ..." syntax.
Most RTL container classes come with one or more enumerators already.
If there is no built-in enumerator, you can write one yourself, and FPC is sufficiently well-designed to use the enumerator you provide.
The enumeration, of course, is based on the type of the element in the container. So for TList and TFPList which which are basically arrays of pointers the enumerator assumes a pointer element, which then usually required casting. For TObjectList the enumerator is a TObject, which usually requires casting, and so on. But delphi mode is not as strict as objfpc mode, so in some cases a cast is not required.
From the point of view of defensive programming, the looser delphi mode is less type-safe, but perhaps more convenient.
A dynamic array of TLabel gives you both type-safety and built-in "for ... in ... do" syntax, and no need for any casting.
Of course it is not "generic" either, like TList, holding only TLabel references and nothing else.
type
TLabelList = array of TLabel;
...
var
Llist: TLabelList;
lbl: TLabel;
begin
// initialise Llist ...
for lbl in Llist do
lbl.Color := clRed;
...
In this code the compiler will stop you using anything but a TLabel as the enumerator.
The compiler also prevents you from doing any kind of assignment to the loop variable lbl. It is read-only.