Martin Frb via fpc-devel <[email protected]> schrieb am Fr.,
28. Nov. 2025, 14:52:
> The first 2 procedures show that
> var v2: TWrap1.specialize TTest4<TObject>;
>
> is valid. The generic can be specialized directly for the variable.
>
> But, if that variable is anywhere within TWrap1, then it fails.
> Why?
>
>
>
> program p1;{$Mode objfpc}
> type
>
> TFoo = class
> procedure Foo2;
> end;
>
> generic TGen<T2: TObject> = class
> procedure Foo2;
> end;
>
> TWrap1 = class
> public type
> generic TTest4<T2: TObject> = class
> procedure Foo2;
> end;
>
> public
> procedure P1;
> end;
>
> var
> gTest4: TWrap1.specialize TTest4<TObject>;
>
> { TFoo }
>
> procedure TFoo.Foo2;
> var
> v2: TWrap1.specialize TTest4<TObject>;
> begin
> end;
>
> procedure TGen.Foo2;
> var
> v2: TWrap1.specialize TTest4<TObject>;
> begin
> end;
>
> // TWRAP1
>
> procedure TWrap1.TTest4.Foo2;
> var // V2: project1.lpr(50,32) Error: Parameters or result types
> cannot contain local type definitions. Use a separate type definition in
> a type block.
> v2: TWrap1.specialize TTest4<TObject>;
> begin
> end;
>
> procedure TWrap1.P1;
> var // V2: project1.lpr(50,32) Error: Parameters or result types
> cannot contain local type definitions. Use a separate type definition in
> a type block.
> v2: TWrap1.specialize TTest4<TObject>;
> begin
> end;
>
> begin
> end.
>
Bug, please report.
Regards,
Sven
>
_______________________________________________
fpc-devel maillist - [email protected]
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel