title: Is it possible to typedef a parameter pack?
body: <p>Is it possible to typedef a parameter pack? For example</p>
  
  <pre><code>template&lt;class T, class... Args&gt;
  struct A
  {
      typedef T Type; // We typedef it, then its derived class can use it.
                      // How about for parameter packs?
  
      // Option 1:
      typedef Args Arguments;
  
      // Option 2:
      using Arguments = Args;
  
      // Option 3: I can put in a tuple, but how can I untuple it to a pack
      typedef tuple&lt;Args...&gt; Tuple;
  };
  </code></pre>
  
  <p>I want to using the above technique to implement the following</p>
  
  <pre><code>template&lt;int... VALUES&gt;
  struct IntegralSequence
  {
      enum { SIZE = sizeof...(VALUES) };
  
      template &lt;unsigned I&gt;
      struct At
      {
          enum { VALUE = typename tuple_element&lt;I, 
                         tuple&lt;integral_constant&lt;int, VALUES&gt;...&gt;&gt;::type::value
               };
      };
  };
  
  template&lt;unsigned N&gt;
  struct AscendingSequence
  {
      typedef IntegralSequence&lt;AscendingSequence&lt;N-1&gt;::VALUES..., N&gt; Type;
      using VALUES = Type::VALUES; // if it works
  };
  
  template&lt;&gt;
  struct AscendingSequence&lt;1&gt;
  {
      typedef IntegralSequence&lt;0&gt; Type;
      using VALUES = Type::VALUES; // if it works
  };
  </code></pre>