title: Couldn't deduce second template parameter of method from template class
body: <p>Take the following example:</p>
  
  <pre><code>template &lt; class T &gt; struct Dummy
  {
      typedef const T &amp; type;
  };
  
  struct Type
  {
      int i = 0;
  
      bool operator == (const Type &amp; o) { return i == o.i; }
  };
  
  template &lt; class T &gt; struct Test
  {
      template &lt; class U &gt;
      bool F(typename Dummy&lt; T &gt;::type a, typename Dummy&lt; U &gt;::type b) const
      {
          return a == b; // dummy operation
      }
  };
  
  int main()
  {
      Type a, b;
      // error: no matching function for call to 'Test&lt;Type&gt;::F(Type&amp;, Type&amp;)'
      // note: template argument deduction/substitution failed:
      // note: couldn't deduce template parameter 'U'
      bool x = Test&lt;Type&gt;{}.F(a, b);
  }
  </code></pre>
  
  <p>I get an error from the compiler that the second parameter of the method couldn't be deduced. What am I doing wrong here?</p>