[fpc-devel] Strange error / Why / generic in wrapper class

Sven Barth pascaldragon at googlemail.com
Fri Nov 28 19:08:21 CET 2025


Martin Frb via fpc-devel <fpc-devel at lists.freepascal.org> 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

>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-devel/attachments/20251128/3f37626f/attachment.htm>


More information about the fpc-devel mailing list