title: No matching function for call in class template specialization for a pointer type
body: <p>I don't know why a pointer cannot be passed to a function as a reference. Perhaps I'm missing the point of the error.</p>
  
  <pre><code>class Point{
  public:
      Point(){}
  };
  
  template&lt;typename KEY,typename VALUE&gt;
  class TemplTest{
  public:
      TemplTest(){}
      bool Set(const KEY&amp; key,const VALUE&amp; value){
          return false;
      }
  };
  
  template&lt;typename KEY,typename VALUE&gt;
  class TemplTest&lt;KEY*,VALUE&gt;{
  public:
      TemplTest(){}
      bool Set(KEY*&amp; key,const VALUE&amp; value){
          return true;
      }
  };
  
  int main(){
      Point p1;
      TemplTest&lt;Point*,double&gt; ht;
      double n=3.14;
      ht.Set(&amp;p1,n);
  
      return 0;
  }
  </code></pre>
  
  <p>Error:</p>
  
  <pre><code>no matching function for call to 'TemplTest&lt;Point*, double&gt;::Set(Point*, double&amp;)'
  no known conversion for argument 1 from 'Point*' to 'Point*&amp;'
  </code></pre>
  
  <p>Please help, thanks!</p>