title: Does the function override the base function?
body: <p>I have three different compilers that I am using to compile this code. One of them (the one that I trust the least) warns that the function in Derived hides the function in Base. The other compilers (one is <a href="http://en.wikipedia.org/wiki/Visual_C%2B%2B#32-bit_versions">Visual C++</a>) does not warn. Visual C++ doesn't even give a warning about it if I enable /Wall or /W4.</p>
  
  <p>I tend to believe that this is a bug in the compiler that's giving a warning, since it compiles the code. If it really didn't override the base function, then it should give an error when I create an instance of the derived template.</p>
  
  <p>Can anyone confirm how this should behave?</p>
  
  <pre><code>struct Base
  {
     virtual void Func(float f) = 0;
  };
  
  template &lt;typename T&gt;
  struct Derived : Base
  {
     virtual void Func(T f){}
  };
  
  int main()
  {
     Derived&lt;float&gt; d;
     d.Func(0);
     return 0;
  }
  </code></pre>
  
  <hr>
  
  <p>When <code>Derived</code> is instantiated with <code>float</code> I get the unexpected warning.  When <code>Derived</code> is instantiated with <code>int</code> I get an error, as expected.</p>