Commit 2625472f by Jason Merrill Committed by Jason Merrill

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: r256802
parent 824721f0
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.
2018-01-17 David Malcolm <dmalcolm@redhat.com> 2018-01-17 David Malcolm <dmalcolm@redhat.com>
PR c++/83799 PR c++/83799
......
...@@ -20370,6 +20370,7 @@ unify_pack_expansion (tree tparms, tree targs, tree packed_parms, ...@@ -20370,6 +20370,7 @@ unify_pack_expansion (tree tparms, tree targs, tree packed_parms,
/* Add in any args remembered from an earlier partial instantiation. */ /* Add in any args remembered from an earlier partial instantiation. */
targs = add_to_template_args (PACK_EXPANSION_EXTRA_ARGS (parm), targs); 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); packed_args = expand_template_argument_pack (packed_args);
...@@ -20385,6 +20386,8 @@ unify_pack_expansion (tree tparms, tree targs, tree packed_parms, ...@@ -20385,6 +20386,8 @@ unify_pack_expansion (tree tparms, tree targs, tree packed_parms,
/* Determine the index and level of this parameter pack. */ /* Determine the index and level of this parameter pack. */
template_parm_level_and_index (parm_pack, &level, &idx); template_parm_level_and_index (parm_pack, &level, &idx);
if (level < levels)
continue;
/* Keep track of the parameter packs and their corresponding /* Keep track of the parameter packs and their corresponding
argument packs. */ argument packs. */
......
// 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;
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment