[fpc-devel] generic constraints...

Martin Frb lazarus at mfriebe.de
Tue Jul 29 10:03:20 CEST 2025


On 29/07/2025 09:53, Mattias Gaertner via fpc-devel wrote:
>
> On 7/25/25 16:31, Martin Frb via fpc-devel wrote:
>>
>> But
>>     generic FooChild<F: TFoo> = class(F)
>>
>> - F is not a variable
>> - TFoo in not a type (for somethnig), TFoo is a constraint
>
> The problem is the ambiguity of TFoo, because Delphi (aka modeswitch) 
> distinguishes TFoo, TFoo<> and TFoo<,>:

Ok, yes. If ever a generic parameter can refer to an (non specialized) 
generic

     generic Foo<G: TGeneric> = class
       type TSome = G<F> ;

Then the name of the generic can not be used as "any specialized type of 
that generic"

Unless it then needs to be prefixed
     generic Foo<G: generic TGeneric> = class

And/or less constrained
     generic Foo<G: generic> = class


>
> AFAIK there is currently no "Any" placeholder in constraints. It would 
> be something like
>   generic FooChild<F: specialized TFoo<>> = ...
>
> Although that looks like something was forgotten. Maybe better:
>
>   generic FooChild<F: specialized TFoo<*>> = ...

Would be nice to have.
It also needs the placeholders to be able to distinguish
   generic TBar<A>
   generic TBar<A,B>


   generic FooChild<F: specialize TBar<,>) = ...
   generic FooChild<F: TBar<,>) = ...

not sure if it should really say "specialize" (even in objfpc) because 
it isn't doing it, it is expecting it to be done elsewhere.


@FPC Team: Worth a feature request?


More information about the fpc-devel mailing list