title: Why is plain old function not selected for explicit call?
body: <p>I have been reading the interesting topic <a href="http://www.gotw.ca/publications/mill17.htm" rel="nofollow noreferrer">Why Not Specialize Function Templates?</a> and somewhere encountered the following example.</p>
  <pre><code>struct Base{};
  
  template&lt;class T&gt;
  void f(T) { cout &lt;&lt; &quot;foo&quot;; }
  
  template&lt;class T&gt;
  void functionSelector(T t)
  {
      f(Base());
      f(t);
  }
  
  void f(Base) { cout &lt;&lt; &quot;bar&quot;; }
  
  int main ()
  {
      functionSelector(Base());
      return 0;
  }
  </code></pre>
  <p>This small program outputs</p>
  <blockquote>
  <p>foobar</p>
  </blockquote>
  <p>and I definitely could not understand why it didn't output</p>
  <blockquote>
  <p>barbar</p>
  </blockquote>
  <p>Any help would be appreciated.</p>