On Thu, May 14, 2026 at 02:05:50PM -0400, Eczbek wrote:
> From db9a0248377987c1e7013d3ac15069790287d975 Mon Sep 17 00:00:00 2001
> From: Eczbek <[email protected]>
> Date: Thu, 14 May 2026 13:54:24 -0400
> Subject: [PATCH] c++: Fix greater-than operator in requires expression in
> template parameters [PR125317]
You don't say how this patch has been tested but I ran dg.exp
with the same patch and it passed.
> PR c++/125317
>
> gcc/cp/ChangeLog:
>
> * parser.cc (cp_parser_requirement_body): Set
> parser->greater_than_is_operator_p.
>
> gcc/testsuite/ChangeLog:
>
> * g++.dg/parse/template34.C: New test.
> ---
> gcc/cp/parser.cc | 4 ++++
> gcc/testsuite/g++.dg/parse/template34.C | 4 ++++
> 2 files changed, 8 insertions(+)
> create mode 100644 gcc/testsuite/g++.dg/parse/template34.C
>
> diff --git a/gcc/cp/parser.cc b/gcc/cp/parser.cc
> index d128de771b5..9923cf6be94 100644
> --- a/gcc/cp/parser.cc
> +++ b/gcc/cp/parser.cc
> @@ -34913,6 +34913,10 @@ cp_parser_requirement_body (cp_parser *parser)
> if (!braces.require_open (parser))
> return error_mark_node;
> + /* Within the body of a requires expression, a '>' token is always the
> + greater-than operator. */
Two spaces after .
> + auto gto = make_temp_override (parser->greater_than_is_operator_p, true);
> +
> tree reqs = cp_parser_requirement_seq (parser);
> if (!braces.require_close (parser))
> diff --git a/gcc/testsuite/g++.dg/parse/template34.C
> b/gcc/testsuite/g++.dg/parse/template34.C
> new file mode 100644
> index 00000000000..4521908a1c1
> --- /dev/null
> +++ b/gcc/testsuite/g++.dg/parse/template34.C
This should probably be in cpp2a/ and named concepts-requires42.C
or so.
Otherwise LGTM.
> @@ -0,0 +1,4 @@
> +// PR c++/125317
> +// { dg-do compile { target c++20 } }
> +
> +template<bool = requires { 0 > 0; }> int x;
> --
> 2.53.0
>
Marek