title: Wrong overloaded call using generic interfaces
body: <p>suppose i have this definitions:</p>
  
  <pre><code>TMyClass1 = class
  end;
  
  TMyClass2 = class
  end;
  
  IModel&lt;T : class&gt; = interface
    ['{E8262D6C-DCAB-46AC-822E-EC369CF734F8}']
    function List() : TObjectList&lt;T&gt;;
  end;
  
  IPresenter&lt;T : class&gt; = interface
    ['{98FB7751-D75A-4C51-B55A-0E5FE68BE213}']
    function Retrieve() : TObjectList&lt;T&gt;;
  end;
  
  IView&lt;T : class&gt; = interface
    ['{59384CD6-30D6-4BD8-AB3D-7FCF4D1A8618}']
    procedure AssignPresenter(APresenter : IPresenter&lt;T&gt;);
  end;
  
  TModel&lt;T : class&gt; = class(TInterfacedObject, IModel&lt;T&gt;)
  public
    function List() : TObjectList&lt;T&gt;; virtual; abstract;
  end;
  
  TPresenter&lt;T : class&gt; = class(TInterfacedObject, IPresenter&lt;T&gt;)
  strict private
    { Private declarations }
    FModel : IModel&lt;T&gt;;
    FView : IView&lt;T&gt;;
  public
    constructor Create(AView : IView&lt;T&gt;);
    function Retrieve() : TObjectList&lt;T&gt;; virtual; abstract;
  end;
  
  TModelClass1 = class(TModel&lt;TMyClass1&gt;);
  
  TPresenterClass1 = class(TPresenter&lt;TMyClass1&gt;);
  
  TModelClass2 = class(TModel&lt;TMyClass2&gt;);
  
  TPresenterClass2 = class(TPresenter&lt;TMyClass2&gt;);
  </code></pre>
  
  <p>and i have this form that implements some of the things i defined:</p>
  
  <pre><code>TForm1 = class(TForm, IView&lt;TMyClass1&gt;, IView&lt;TMyClass2&gt;)
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    FPresenter1 : IPresenter&lt;TMyClass1&gt;;
    FPresenter2 : IPresenter&lt;TMyClass2&gt;;
    procedure AssignPresenter(APresenter : IPresenter&lt;TMyClass1&gt;); overload;
    procedure AssignPresenter(APresenter : IPresenter&lt;TMyClass2&gt;); overload;
  end;
  
  procedure TForm1.FormCreate(Sender: TObject);
  begin
   TPresenterClass1.Create((Self as IView&lt;TMyClass1&gt;));
   TPresenterClass2.Create((Self as IView&lt;TMyClass2&gt;));
  end;
  
  procedure TForm1.AssignPresenter(APresenter: IPresenter&lt;TMyClass1&gt;);
  begin
    Self.FPresenter1 := APresenter;
  end;
  
  procedure TForm1.AssignPresenter(APresenter: IPresenter&lt;TMyClass2&gt;);
  begin
    Self.FPresenter2 := APresenter;
  end;
  </code></pre>
  
  <p>so the problem here is that delphi can't figure out what method to call, in this example, only the <code>AssignPresenter(APresenter: IPresenter&lt;TMyClass2&gt;)</code> is called in both cases, so probably im missing something here but i can't figure out atm.</p>
  
  <p>thx in advance.</p>