Commit 1b7ac922 by Jason Merrill Committed by Jason Merrill

re PR c++/58856 (spurious 'wrong number of template arguments' error for template alias)

	PR c++/58856
	* pt.c (num_innermost_template_parms): New.
	(get_underlying_template): Use it.

From-SVN: r206406
parent 5a5e7deb
2014-01-07 Jason Merrill <jason@redhat.com>
PR c++/58856
* pt.c (num_innermost_template_parms): New.
(get_underlying_template): Use it.
PR c++/58965
* mangle.c (write_guarded_var_name): Handle null DECL_NAME.
......
......@@ -5149,6 +5149,15 @@ alias_template_specialization_p (const_tree t)
&& DECL_ALIAS_TEMPLATE_P (TYPE_TI_TEMPLATE (t)));
}
/* Return the number of innermost template parameters in TMPL. */
static int
num_innermost_template_parms (tree tmpl)
{
tree parms = INNERMOST_TEMPLATE_PARMS (DECL_TEMPLATE_PARMS (tmpl));
return TREE_VEC_LENGTH (parms);
}
/* Return either TMPL or another template that it is equivalent to under DR
1286: An alias that just changes the name of a template is equivalent to
the other template. */
......@@ -5164,6 +5173,8 @@ get_underlying_template (tree tmpl)
{
tree sub = TYPE_TI_TEMPLATE (result);
if (PRIMARY_TEMPLATE_P (sub)
&& (num_innermost_template_parms (tmpl)
== num_innermost_template_parms (sub))
&& same_type_p (result, TREE_TYPE (sub)))
{
/* The alias type is equivalent to the pattern of the
......
// PR c++/58856
// { dg-require-effective-target c++11 }
template <typename T>
struct U1 {};
template <typename T1, typename... Ts>
using U2 = U1<T1>;
template <typename T1, typename... Ts>
using U3 = U2<T1, Ts...>;
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