title: Keyword for both types and integrals for parameter packs
body: <p>If I have a trait that detects a specialisation (i.e. a templated type):</p>
  <pre><code>template &lt;typename T&gt;
  struct is_specialisation : std::false_type {
  };
  
  template &lt;template &lt;typename...&gt; class U, typename... Args&gt;
  struct is_specialisation&lt;U&lt;Args...&gt;&gt; : std::true_type {
  };
  </code></pre>
  <p>This works as expected:</p>
  <pre><code>traits::is_specialisation&lt;std::vector&lt;int&gt;&gt;::value;              // True
  traits::is_specialisation&lt;std::string_view&gt;::value;              // True
  traits::is_specialisation&lt;std::tuple&lt;char, int, double&gt;&gt;::value; // True
  traits::is_specialisation&lt;float&gt;::value;                         // False
  </code></pre>
  <p>Except when one of the parameter pack types is actually a value:</p>
  <pre><code>traits::is_specialisation&lt;std::array&lt;char, 4&gt;&gt;::value;  // False
  </code></pre>
  <p>This is because the <code>template &lt;typename...&gt; class U</code> declaration is specifically for <em>types</em>, if I switched it to <code>template &lt;auto...&gt; class U</code> it would accept all values - but is there a way of declaring such it can take a mixture of types <em>and</em> values?</p>