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?
_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

Reply via email to