Genéricos não resolvendo tipos de método corretamente
Considere o seguinte :
{$APPTYPE CONSOLE}
uses
Generics.Collections;
type
TObjProc = procedure of object;
TFoo = class
public procedure DoFoo;
public procedure DoBar;
end;
procedure TFoo.DoFoo;
begin
WriteLn('foo');
end;
procedure TFoo.DoBar;
begin
WriteLn('bar');
end;
var
ProcList : TList<TObjProc>;
Foo : TFoo;
aProc : TObjProc;
begin
Foo := TFoo.Create;
ProcList := TList<TObjProc>.Create;
ProcList.Add(Foo.DoFoo);
ProcList.Add(Foo.DoBar);
for aProc in ProcList do aProc;
ReadLn;
end.
Isso produz a saída esperada de
foo
bar
Agora, suponha que desejamos atribuir um procedimento da lista. Enumerar obras, como acima. Isso também funciona:
aProc := ProcList.Items[0];
aProc;
Mas isso gera um erro do compilador :
aProc := ProcList.First;
// E2010 Incompatible types:
//'procedure, untyped pointer or untyped parameter' and 'TObjProc'
O que é duplamente estranho, já que
function TList<T>.First: T;
begin
Result := Items[0];
end;
Então o que está acontecendo?
Isso afeta as versões mais recentes do Delphi também? Fico tentado a fazer o controle de qualidade se houver uma expectativa razoável de que isso funcione (o que acho que existe).