title: What is the syntax for parameter pack expansion with alignas?
body: <p>I'm trying to expand a parameter pack in an alignment specifier.  I can't get the syntax right.  Here's a simple example:</p>
  
  <pre><code>#include &lt;cstdint&gt;
  #include &lt;tuple&gt;
  
  template &lt;typename... Ts&gt;
  struct C
  {
      using Tuple_Type = std::tuple &lt;Ts...&gt;;
  
      void f()
      {
          uint8_t i1;
          uint8_t i2 alignas (2);
          uint8_t i3 alignas (typename std::tuple_element&lt;0, Tuple_Type&gt;::type);
          uint8_t i4 alignas (Ts...);
      }
  };
  
  //template class C &lt;&gt;;  // not compatible with i3 declaration above
  template class C &lt;uint64_t&gt;;
  </code></pre>
  
  <p>This fails to compile with gcc 4.8.3:</p>
  
  <pre><code>foo.cpp: In member function 'void C&lt;Ts&gt;::f()':
  foo.cpp:14:31: error: expected ')' before '...' token
           uint8_t i4 alignas (Ts...);
                                 ^
  foo.cpp:14:31: error: expected ')' before '...' token
  foo.cpp:14:31: error: expected initializer before '...' token
  </code></pre>
  
  <p>The C++ standard ([dcl.align]) says "An <em>alignment-specifier</em> with an ellipsis is a pack expansion", so it seems like it should be possible to do what I want.</p>
  
  <p>I've been unable to find an example of this kind of parameter pack expansion, and my search for a possible bug in gcc didn't find anything.</p>