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]

        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. */
+  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
@@ -0,0 +1,4 @@
+// PR c++/125317
+// { dg-do compile { target c++20 } }
+
+template<bool = requires { 0 > 0; }> int x;
--
2.53.0

Reply via email to