program Project1;
{$mode objfpc}
type
generic TTest<T> = procedure(A: T);
generic procedure Test1<T>(A: T);
begin
end;
generic procedure Test2<T>(A: T; F: specialize TTest<T>);
var
i: Integer;
begin
for i := 1 to 10000000 do
F(I);
end;
generic procedure Test3<T, specialize TTest<T>>(A: T);
var
i: Integer;
begin
for i := 1 to 10000000 do
F(I);
end;
generic procedure Test4<T, const F:specialize TTest<T>>(A: T);
var
i: Integer;
begin
for i := 1 to 10000000 do
F(I);
end;
begin
end.