https://gcc.gnu.org/g:df59bf20d85384f56395f573f294ddd45327347a

commit r15-9493-gdf59bf20d85384f56395f573f294ddd45327347a
Author: Jonathan Wakely <jwak...@redhat.com>
Date:   Tue Apr 15 14:01:55 2025 +0100

    libstdc++: Do not declare namespace ranges in <numeric> unconditionally
    
    Move namespace ranges inside the feature test macro guard, because
    'ranges' is not a reserved name before C++20.
    
    libstdc++-v3/ChangeLog:
    
            * include/std/numeric (ranges): Only declare namespace for C++23
            and later.
            (ranges::iota_result): Fix indentation.
            * testsuite/17_intro/names.cc: Check ranges is not used as an
            identifier before C++20.

Diff:
---
 libstdc++-v3/include/std/numeric         | 8 +++-----
 libstdc++-v3/testsuite/17_intro/names.cc | 4 ++++
 2 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/libstdc++-v3/include/std/numeric b/libstdc++-v3/include/std/numeric
index 4d36fcd36d98..490963ee46d1 100644
--- a/libstdc++-v3/include/std/numeric
+++ b/libstdc++-v3/include/std/numeric
@@ -732,12 +732,11 @@ namespace __detail
   /// @} group numeric_ops
 #endif // C++17
 
+#if __glibcxx_ranges_iota >= 202202L // C++ >= 23
 namespace ranges
 {
-#if __glibcxx_ranges_iota >= 202202L // C++ >= 23
-
   template<typename _Out, typename _Tp>
-  using iota_result = out_value_result<_Out, _Tp>;
+    using iota_result = out_value_result<_Out, _Tp>;
 
   struct __iota_fn
   {
@@ -762,9 +761,8 @@ namespace ranges
   };
 
   inline constexpr __iota_fn iota{};
-
-#endif // __glibcxx_ranges_iota
 } // namespace ranges
+#endif // __glibcxx_ranges_iota
 
 _GLIBCXX_END_NAMESPACE_VERSION
 } // namespace std
diff --git a/libstdc++-v3/testsuite/17_intro/names.cc 
b/libstdc++-v3/testsuite/17_intro/names.cc
index 4458325e52b3..f67818db425f 100644
--- a/libstdc++-v3/testsuite/17_intro/names.cc
+++ b/libstdc++-v3/testsuite/17_intro/names.cc
@@ -142,6 +142,10 @@
 #define try_emplace (
 #endif
 
+#if __cplusplus < 202002L
+#define ranges (
+#endif
+
 // These clash with newlib so don't use them.
 # define __lockable            cannot be used as an identifier
 # define __null_sentinel       cannot be used as an identifier

Reply via email to