title: Why is term not evaluating to a function taking 0 arguments?
body: <p>When I try compiling</p>
  
  <pre><code>template&lt;bool val&gt;
  struct boolean { static const bool value = val; };
  
  template&lt;typename T&gt;
  struct is_callable : boolean&lt;sizeof((*(T*)0)()) &gt;= 0&gt; { };            // error!
  
  int main(void) { bool b = is_callable&lt;int (*)()&gt;::value; }
  </code></pre>
  
  <p>I get:</p>
  
  <pre><code>error C2064: term does not evaluate to a function taking 0 arguments  
      see reference to class template instantiation 'is_callable&lt;T&gt;' being compiled
  </code></pre>
  
  <p>I'm pretty sure <code>int (*)()</code> is callable with <code>0</code> arguments... so why doesn't this compile?  </p>