https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105268

--- Comment #2 from Marek Polacek <mpolacek at gcc dot gnu.org> ---
Looks like we mistakenly parse C_many<int> as a placeholder-type-specifier, and
things go wrong from there.

For C_one<int> cp_parser_placeholder_type_specifier -> finish_type_constraints
-> build_type_constraint -> build_concept_check -> build_standard_check ->
coerce_template_parms -> coerce_template_parms fails here:

 8916   nargs = inner_args ? NUM_TMPL_ARGS (inner_args) : 0;
 8917   if ((nargs - variadic_args_p > nparms && !variadic_p)
 8918       || (nargs < nparms - variadic_p
 8919           && require_all_args
 8920           && !variadic_args_p
 8921           && (!use_default_args
 8922               || (TREE_VEC_ELT (parms, nargs) != error_mark_node
 8923                   && !TREE_PURPOSE (TREE_VEC_ELT (parms, nargs))))))
 8924     {
 8925     bad_nargs:

but for C_many<int> variadic_p is true so we don't return error_mark_node but
<type_argument_pack>.

Reply via email to