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.
_______________________________________________
fpc-devel maillist - [email protected]
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel