re PR c++/65186 (internal compiler error: in tsubst, at cp/pt.c:11738)
Fix PR c++/65186 gcc/cp/ChangeLog: PR c++/65186 * pt.c (invalid_nontype_parm_type_p): Accept a bound template template parm type under C++11 and later. gcc/testsuite/ChangeLog: PR c++/65186 * g++.dg/template/pr65186.C: New test. From-SVN: r225749
This commit is contained in:
parent
795038b722
commit
15d6614a16
4 changed files with 42 additions and 0 deletions
|
@ -1,3 +1,9 @@
|
|||
2015-07-13 Patrick Palka <ppalka@gcc.gnu.org>
|
||||
|
||||
PR c++/65186
|
||||
* pt.c (invalid_nontype_parm_type_p): Accept a bound template
|
||||
template parm type under C++11 and later.
|
||||
|
||||
2015-07-12 Aldy Hernandez <aldyh@redhat.com>
|
||||
|
||||
* call.c: Fix double word typos.
|
||||
|
|
|
@ -20996,6 +20996,11 @@ invalid_nontype_parm_type_p (tree type, tsubst_flags_t complain)
|
|||
return 0;
|
||||
else if (TREE_CODE (type) == NULLPTR_TYPE)
|
||||
return 0;
|
||||
/* A bound template template parm could later be instantiated to have a valid
|
||||
nontype parm type via an alias template. */
|
||||
else if (cxx_dialect >= cxx11
|
||||
&& TREE_CODE (type) == BOUND_TEMPLATE_TEMPLATE_PARM)
|
||||
return 0;
|
||||
|
||||
if (complain & tf_error)
|
||||
{
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2015-07-13 Patrick Palka <ppalka@gcc.gnu.org>
|
||||
|
||||
PR c++/65186
|
||||
* g++.dg/template/pr65186.C: New test.
|
||||
|
||||
2015-07-13 Mantas Mikaitis <mantas.mikaitis@arm.com>
|
||||
|
||||
* gcc.target/arm/macro_defs0.c: Add directive to skip
|
||||
|
|
26
gcc/testsuite/g++.dg/template/pr65186.C
Normal file
26
gcc/testsuite/g++.dg/template/pr65186.C
Normal file
|
@ -0,0 +1,26 @@
|
|||
// { dg-do compile { target c++11 } }
|
||||
// PR c++/65186
|
||||
|
||||
template<typename A, A x, A y>
|
||||
using Id = int;
|
||||
|
||||
template<
|
||||
typename A,
|
||||
A x,
|
||||
A y,
|
||||
Id<A, x, y> p,
|
||||
template<A a, A b, Id<A, a, b>> class C,
|
||||
C<x, x, x> // { dg-bogus "not a valid type" }
|
||||
> using J = C<x, y, p>;
|
||||
|
||||
|
||||
template<class A>
|
||||
using Z = A;
|
||||
|
||||
template<
|
||||
template <class> class A,
|
||||
A<int> B // { dg-bogus "not a valid type" }
|
||||
>
|
||||
struct C { };
|
||||
|
||||
C<Z, 5> a;
|
Loading…
Add table
Reference in a new issue