specialization fails for generic declared inside of class / if specialize happens in method of that class
- FPC 3.3.1 9d6b66c9e4 and also FPC 3.2.3
- Windows 10 64 bit
The below gives `Error: Parameters or result types cannot contain local type definitions. Use a separate type definition in a type block.` if the generic is
- declared nested in a class
- specialized in a function of the nested class (or the generic within the nested class)
The error also happens if the specialization is **within a local type block**.
The same specialization can be done in local var blocks of methods outside the wrapper.
```pascal
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>;
type
x2 = 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>;
type
x2 = TWrap1.specialize TTest4<TObject>;
begin
end;
begin
end.
```
issue