title: Overloading template on number of template parameters including literal values
body: <p><a href="https://stackoverflow.com/a/6988722/1396507">This</a> answer provides a <code>C++11</code> solution for the problem of <em>overloading</em> a template class based on the number of template parameters. </p>
  
  <p>However, this approach seems to work only if the new template parameters are types, meaning  this</p>
  
  <pre class="lang-c++ prettyprint-override"><code>template &lt;typename ... Ts&gt; struct awesome;
  
  template &lt;typename T, typename U&gt; struct awesome&lt;T, U&gt; {};
  template &lt;typename T, unsigned int I, typename U&gt; struct awesome&lt;T, I, U&gt; {};
  
  int main() {
      awesome&lt;int,float&gt; aw;
      awesome&lt;int,42,float&gt; aw2;
  }
  </code></pre>
  
  <p><a href="http://coliru.stacked-crooked.com/a/e3781e08c10c5f4e" rel="nofollow noreferrer">does not compile</a>. Can the desired behaviour achieved using a different approach?</p>