Here we crash when issuing the "constraint C has type T, not bool"
error, because pp_cxx_parameter_mapping wasn't prepared to see an
anonymous template parameter. With this patch we print
error: constraint 'auto(<lambda>) [with <unnamed> = 0]' has type '<lambda()>', not 'bool'
The "<unnamed>" is what this patch adds.
PR c++/103408
gcc/cp/ChangeLog:
* cxx-pretty-print.c (pp_cxx_parameter_mapping): Print "<unnamed>"
rather than crash on an unnamed template parameter.
gcc/testsuite/ChangeLog:
* g++.dg/cpp23/concepts-err1.C: New test.
if (TYPE_P (parm))
pp->type_id (parm);
+ else if (tree name = DECL_NAME (TEMPLATE_PARM_DECL (parm)))
+ pp_cxx_tree_identifier (pp, name);
else
- pp_cxx_tree_identifier (pp, DECL_NAME (TEMPLATE_PARM_DECL (parm)));
+ pp->translate_string ("<unnamed>");
pp_cxx_whitespace (pp);
pp_equal (pp);
--- /dev/null
+// PR c++/103408
+// { dg-do compile { target c++23 } }
+
+template<int>
+concept C = auto([]{}); // { dg-error "constraint" }
+static_assert(C<0>); // { dg-error "non-constant condition for static assertion" }