title: Why does the Standard prohibit friend declarations of partial specializations?
body: <p>The C++ standard prohibits friend declarations of partial specializations. (§14.5.3/8):</p>
  
  <blockquote>
    <p>Friend declarations shall not declare partial specializations. [Example:</p>
  </blockquote>
  
  <pre><code>template&lt;class T&gt; class A { };
  class X {
      template &lt;class T&gt; friend class A&lt;T*&gt;;   //error
  };
  </code></pre>
  
  <blockquote>
    <p>--end example]</p>
  </blockquote>
  
  <p>Other questions, e.g. <a href="https://stackoverflow.com/q/1458752/1362568">this one</a>, 
  have received answers that invoke this prohibition, but I would like to know the
  rationale. I don't see it and can't find it with my favourite search engine. I 
  can find however that it goes right back to the C++98 standard, so presumably 
  the rationale is quite basic and clear. Can someone explain it to me?</p>