PR c++/81843 - ICE with variadic member template.
PR c++/72801 * pt.c (unify_pack_expansion): Don't try to deduce enclosing template args. From-SVN: r256808
This commit is contained in:
parent
99547487e1
commit
b4e93c5826
@ -1,5 +1,10 @@
|
||||
2018-01-17 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/81843 - ICE with variadic member template.
|
||||
PR c++/72801
|
||||
* pt.c (unify_pack_expansion): Don't try to deduce enclosing
|
||||
template args.
|
||||
|
||||
PR c++/82331 - ICE with variadic partial specialization of auto
|
||||
* pt.c (unify) [TEMPLATE_PARM_INDEX]: Set processing_template_decl
|
||||
around call to tsubst.
|
||||
|
@ -20068,6 +20068,7 @@ unify_pack_expansion (tree tparms, tree targs, tree packed_parms,
|
||||
|
||||
/* Add in any args remembered from an earlier partial instantiation. */
|
||||
targs = add_to_template_args (PACK_EXPANSION_EXTRA_ARGS (parm), targs);
|
||||
int levels = TMPL_ARGS_DEPTH (targs);
|
||||
|
||||
packed_args = expand_template_argument_pack (packed_args);
|
||||
|
||||
@ -20083,6 +20084,8 @@ unify_pack_expansion (tree tparms, tree targs, tree packed_parms,
|
||||
|
||||
/* Determine the index and level of this parameter pack. */
|
||||
template_parm_level_and_index (parm_pack, &level, &idx);
|
||||
if (level < levels)
|
||||
continue;
|
||||
|
||||
/* Keep track of the parameter packs and their corresponding
|
||||
argument packs. */
|
||||
|
12
gcc/testsuite/g++.dg/cpp0x/variadic171.C
Normal file
12
gcc/testsuite/g++.dg/cpp0x/variadic171.C
Normal file
@ -0,0 +1,12 @@
|
||||
// PR c++/81843
|
||||
// { dg-do compile { target c++11 } }
|
||||
|
||||
template < typename > struct A;
|
||||
template < typename, typename > struct B;
|
||||
template < typename ... S > struct C
|
||||
{
|
||||
template < typename > struct D {};
|
||||
template < typename ... T > struct D < A < B < S, T > ... > >;
|
||||
};
|
||||
|
||||
C <>::D < A < B < int, int > > > c;
|
Loading…
Reference in New Issue
Block a user