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.
Tested x86_64-pc-linux-gnu, applying to trunk. gcc/cp/ChangeLog 2020-03-24 Jason Merrill <ja...@redhat.com> * pt.c (any_template_parm_r): Look into the type of a non-type template parm. --- gcc/cp/pt.c | 1 + gcc/testsuite/g++.dg/cpp2a/concepts-nonbool2.C | 11 +++++++++++ 2 files changed, 12 insertions(+) create mode 100644 gcc/testsuite/g++.dg/cpp2a/concepts-nonbool2.C diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 03a8dfbd37c..3c96eeca191 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -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. */ diff --git a/gcc/testsuite/g++.dg/cpp2a/concepts-nonbool2.C b/gcc/testsuite/g++.dg/cpp2a/concepts-nonbool2.C new file mode 100644 index 00000000000..ebede46b368 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp2a/concepts-nonbool2.C @@ -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; +} base-commit: 07f8bcc6ea9f3c0850a56a7431d866178d5cee92 -- 2.18.1