Discussion:
[fpc-pascal] Restricted generic param types
Ryan Joseph
2018-11-09 04:47:42 UTC
Permalink
I’m getting a parse error here. It thinks the “U” is another type but in fact it’s another generic parameter and not related to “T” at all. Is this a bug? I don’t think the way the parsing works the compiler actually can discern this condition.

{$mode objfpc}
{$modeswitch advancedrecords}

program generic_constants_restricted;

type
generic TList<T:tobject, U> = record
end;

begin
end.


Regards,
Ryan Joseph

_______________________________________________
fpc-pascal maillist - fpc-***@lists.freepascal.org
http://lists.freepascal.org/cgi-bi
Sven Barth via fpc-pascal
2018-11-09 06:53:39 UTC
Permalink
I’m getting a parse error here. It thinks the “U” is another type but in
fact it’s another generic parameter and not related to “T” at all. Is this
a bug? I don’t think the way the parsing works the compiler actually can
discern this condition.
{$mode objfpc}
{$modeswitch advancedrecords}
program generic_constants_restricted;
type
generic TList<T:tobject, U> = record
end;
begin
end.
You must use ";" in that case. All parameters separated by "," are of the
same "constraint type" while ";" separates these. Essentially like a
parameter declaration for a function.
(and yes, Delphi handles it like that as well)

Regards,
Sven
Loading...