c++: Fix template parm with dependent type in concepts.

While looking at PR94186 I also noticed this regression; if a non-type
template parameter uses a type parameter in its type, we need to map both
template parameters.

gcc/cp/ChangeLog
2020-03-24  Jason Merrill  <jason@redhat.com>

	* pt.c (any_template_parm_r): Look into the type of a non-type
	template parm.
This commit is contained in:
Jason Merrill 2020-03-24 18:25:17 -04:00
parent 6e771c087b
commit 5c16174184
3 changed files with 17 additions and 0 deletions

View File

@ -1,3 +1,8 @@
2020-03-24 Jason Merrill <jason@redhat.com>
* pt.c (any_template_parm_r): Look into the type of a non-type
template parm.
2020-03-24 Jason Merrill <jason@redhat.com>
* cp-tree.h (cp_expr): When constructing from an expr and a

View File

@ -10431,6 +10431,7 @@ any_template_parm_r (tree t, void *data)
WALK_SUBTREE (TREE_OPERAND (t, 1));
break;
case TEMPLATE_PARM_INDEX:
case PARM_DECL:
/* A parameter or constraint variable may also depend on a template
parameter without explicitly naming it. */

View File

@ -0,0 +1,11 @@
// { dg-do compile { target concepts } }
template<class X, X x>
concept C = requires {
requires x; // { dg-error "bool" }
};
int main() {
C<int, 0>;
return 0;
}