Commit 36b21740 by Dodji Seketeli Committed by Dodji Seketeli

PR c++/52343 - error with alias template as template template argument

In the example accompanying this patch, check_instantiated_arg tries
to ensure that a non-type template argument should be a constant if it
has integral or enumeration type.

The problem is that an alias template which type-id is, e.g, an
integer, looks like an argument that has integral/enumeration type:
its TREE_TYPE is an integer type.  So check_instantiated_arg
mistenkaly barks that this integral non-type argument is not a
constant.

Bootstrapped and tested on x86_64-unknown-linux-gnu against trunk.

gcc/cp/

	PR c++/52343
	* pt.c (check_instantiated_arg): Allow type template arguments.

gcc/testsuite/

	PR c++/52343
	* g++.dg/cpp0x/alias-decl-29.C: New test.

From-SVN: r194960
parent 78aff336
2013-01-04 Dodji Seketeli <dodji@redhat.com>
PR c++/52343
* pt.c (check_instantiated_arg): Allow type template arguments.
2013-01-04 Jason Merrill <jason@redhat.com>
PR c++/55877
......
......@@ -14419,6 +14419,9 @@ check_instantiated_arg (tree tmpl, tree t, tsubst_flags_t complain)
return true;
}
}
/* Class template and alias template arguments should be OK. */
else if (DECL_TYPE_TEMPLATE_P (t))
;
/* A non-type argument of integral or enumerated type must be a
constant. */
else if (TREE_TYPE (t)
......
2013-01-04 Dodji Seketeli <dodji@redhat.com>
PR c++/52343
* g++.dg/cpp0x/alias-decl-29.C: New test.
2013-01-06 Paul Thomas <pault@gcc.gnu.org>
PR fortran/PR53876
......
// Origin: PR c++/52343
// { dg-do compile { target c++11 } }
template<typename>
using A = int;
template<template<class> class>
struct B {};
B<A> b;
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