@Martin_fr you are right, readability is mostly about familiarity. You know what Inc means, or you know when I say var, you know I mean variant. The point is stop at a general use case. For the rest, options and switches should be enough, that is why I am asking for it. If you write a little generic code, using generic/specialize is a nice note, but more of them and your code looks distracted as after a couple of hours you know what <> means.
Yes (short time / temp), and no. The longer you hadn't looked at some code, before you return to it. You may still know what the "<>" mean, but you have to also spot them. Same with too many short vars. Code with i,j,k,l,m,n is easy to write at first... Come back later, and the story changes. If your code also uses lots of comparison, bitshift, enum >< / <> .... => then happy spotting of where you have specialization.
Instead, specialization should always be done outside code, and outside var blocks... For types, always declare a new named type for each specialization. Then you have space and room for the keyword.
The real problem is how generic functions work. Personally I consider it a huge flaw, that you can't (afaik) do something like
procedure IntFoo = specialize GenFoo<Integer>;
(or even several overloaded "Foo").
But, if your issue is triggered by that, then counter acting it with another flaw... Not a good choice imho. And leaving away the verbose "specialize" is a flaw. Remember one of the strength of Pascal is it verbosity. E.g. the begin end are much clearer, and easier to spot markers, than some curly brackets. And so "specialize" is a better marker than only "<>". Just, it doesn't belong into the actual code block. Pascal thrives on declaring stuff up front.