https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71833

Martin Sebor <msebor at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2016-07-11
                 CC|                            |msebor at gcc dot gnu.org
            Summary|ICE on valid C++11 code     |[5/6/7 regression] ICE on
                   |with nested variadic        |valid C++11 code with
                   |templates: tree check:      |nested variadic templates:
                   |accessed elt 0 of tree_vec  |tree check: accessed elt 0
                   |with 1 elts in              |of tree_vec with 1 elts in
                   |coerce_template_parameter_p |coerce_template_parameter_p
                   |ack, at cp/pt.c:7439        |ack, at cp/pt.c:7439
     Ever confirmed|0                           |1
      Known to fail|                            |4.9.3, 5.3.0, 6.1.0, 7.0

--- Comment #1 from Martin Sebor <msebor at gcc dot gnu.org> ---
Confirmed with r208178 committed in the 4.9.0 cycle as the root cause of the
ICE. 

r208178 | jason | 2014-02-26 12:08:20 -0500 (Wed, 26 Feb 2014) | 10 lines

        PR c++/54440
        * pt.c (get_template_parm_index): New.
        (fixed_parameter_pack_p_1, fixed_parameter_pack_p): New.
        (process_template_parm): Allow bare packs in template template
        parm template parms.
        (coerce_template_parameter_pack): Handle fixed template template
        parm packs and fixed packs not at the end of the parm list.
        (coerce_template_parms): Handle template parm packs not at the end
        of the parm list.
        (gen_elem_of_pack_expansion_instantiation): Handle a decl expansion.

r208177 rejects the test case with the error below.  So does EDG eccp 4.11,
with a similar error.  But Clang accepts it, so I'm not sure whether or not
it's valid without some studying of the standard.

error: parameter pack ‘<anonymous>’ must be at the end of the template
parameter list
   template < Ts ..., typename ... Us > struct B {};
                                               ^
t.C:8:7: error: ‘B’ in ‘struct A<>’ does not name a template type
 A <>::B < int > e;
       ^

Reply via email to