title: what's the mean of just a typename in template parameter list?
body: <pre><code>template &lt;typename Method, typename&gt;
  struct is_default : std::false_type { };
  </code></pre>
  
  <p>and what's the difference between the code above and this:</p>
  
  <pre><code>struct default_ { };
  template &lt;typename Method&gt;
  struct is_default&lt;Method, decltype((void)
      static_cast&lt;default_&gt;(*(Method*)0)
  )&gt;
      : std::true_type
  { };
  </code></pre>
  
  <p>I can figure out that the last one is used to identify whether the <code>Method</code> is default. But I cannnot understand the use of  <code>decltype((void)static_cast&lt;default_&gt;((Method*)0))</code> , how does it work, and how it make the second code block different from the first code block? And what's the mean of just a <code>typename</code> in template parameter list like this <code>template &lt;typename Method, typename&gt;</code>?</p>