title: Is making a function template specialization virtual legal?
body: <p>In C++, a function template specialization is supposed to act exactly like a normal function. Does that mean that I can make one virtual?</p>
  
  <p>For example:</p>
  
  <pre><code>struct A
  {
      template &lt;class T&gt; void f();
      template &lt;&gt; virtual void f&lt;int&gt;() {}
  };
  
  struct B : A
  {
      template &lt;class T&gt; void f();
      template &lt;&gt; virtual void f&lt;int&gt;() {}
  };
  
  int main(int argc, char* argv[])
  {
      B b;
      A&amp; a = b;
      a.f&lt;int&gt;();
  }
  </code></pre>
  
  <p><a href="http://en.wikipedia.org/wiki/Microsoft_Visual_Studio#Visual_Studio_2005" rel="noreferrer">Visual Studio 2005</a> gives me the following error:</p>
  
  <blockquote>
    <p>fatal error C1001: An internal error has occurred in the compiler.</p>
  </blockquote>