The patch http://hg.blaise.ru/public/fpc/rev/544a934d262e (attached) fixes the following: -------8<------- {$Mode Delphi}
type G<T> = class var X: T; // EXPECTED: gets compiled // ACTUAL: 'Error: Generics without specialization cannot be used as a type for a variable' class var F: function(const X: T) : G<T> of object; function Foo(const X: T): G<T>; end; function G<T>.Foo(const X: T): G<T>; begin result := G<T>.Create; result.X := X end; begin G<Integer>.F := G<Integer>.Create.Foo; writeln( G<Integer>.F(42).X = 42 ); end. -------8<------- -- βþ
# HG changeset patch # User Blaise.ru # Date 1608134554 -10800 ! procvar_dec: allow generic instantiations as result types of procedural types diff -r 0a8aff8d8273 -r 544a934d262e ptype.pas --- a/ptype.pas Wed Dec 16 16:38:50 2020 +0300 +++ b/ptype.pas Wed Dec 16 19:02:34 2020 +0300 @@ -1587,7 +1587,7 @@ if is_func then begin consume(_COLON); - single_type(pd.returndef,[]); + single_type(pd.returndef,[stoAllowSpecialization]); end; if try_to_consume(_OF) then begin
_______________________________________________ fpc-devel maillist - fpc-devel@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel