title: Enforce variadic template of certain type
body: <p>I would like to enforce the type of variadic template to be identical to an earlier set template type. In the below example, I'd like T and U to be the same type.</p>
  
  <p><a href="https://ideone.com/1hzgic" rel="noreferrer">code on ideone.com</a></p>
  
  <pre><code>#include &lt;iostream&gt;
  #include &lt;string&gt;
  
  template&lt;class T&gt;
  struct Foo {
  
      Foo(T val) {
          std::cout &lt;&lt; "Called single argument ctor" &lt;&lt; std::endl;
          // [...]    
      }    
  
      // How to enforce U to be the same type as T?
      template&lt;class... U&gt;
      Foo(T first, U... vals) {
          std::cout &lt;&lt; "Called multiple argument ctor" &lt;&lt; std::endl;
          // [...]   
      }
  
  };
  
  int main() {
  
      // Should work as expected.
      Foo&lt;int&gt; single(1);
  
      // Should work as expected.
      Foo&lt;int&gt; multiple(1, 2, 3, 4, 5);
  
      // Should't work (but works right now). The strings are not integers.
      Foo&lt;int&gt; mixedtype(1, "a", "b", "c");
  
      // Also shouldn't work. (doesn't work right now, so that is good)
      Foo&lt;int&gt; alsomixedtype(1, 1, "b", "c");
  }
  </code></pre>