Calling the wrong function in Delphi mode + generic + with

FPC [main] x64 Win


program app;
{$mode delphi}
type
  TTestObject = class
    procedure Foo<T: class>;
  end;
  TObj = class
    procedure kek;
    destructor Destroy; override;
  end;

procedure TTestObject.Foo<T>;
begin
  Self.Free;
end;

destructor TObj.Destroy;
begin
  WriteLn('kek');
end;

procedure TObj.kek;
begin
  with TTestObject.Create do
    Foo<TTestObject>;
end;

begin
  TObj.Create.kek;

  ReadLn;
end.

Output:

kek

Expected (nothing):

Edited by alligator