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

commit r17-5020-gc53ce36778e2d507ae7da7fc9117e69b044e4f3f
Author: Tomasz KamiƄski <[email protected]>
Date:   Fri Oct 9 10:14:34 2026 +0200

    libstdc++: Include range_access.h from <simd>
    
    This implements LWG4385, "Including <simd> doesn't provide
    std::begin/end".
    
    libstdc++-v3/ChangeLog:
    
            * include/std/simd: Include <bits/ranges_access.h>.
            Use angled instead of quoted includes.
            * testsuite/std/simd/traits_common.cc: Add test for
            calling non-member begin, end, size, ....
    
    Reviewed-by: Jonathan Wakely <[email protected]>

Diff:
---
 libstdc++-v3/include/std/simd                    | 17 +++++++++--------
 libstdc++-v3/testsuite/std/simd/traits_common.cc |  8 ++++++++
 2 files changed, 17 insertions(+), 8 deletions(-)

diff --git a/libstdc++-v3/include/std/simd b/libstdc++-v3/include/std/simd
index 0523fce3baf8..a64a8beaf0b3 100644
--- a/libstdc++-v3/include/std/simd
+++ b/libstdc++-v3/include/std/simd
@@ -39,16 +39,17 @@
 
 #ifdef __glibcxx_simd
 
-#include "bits/simd_vec.h"
-#include "bits/simd_loadstore.h"
-#include "bits/simd_mask_reductions.h"
-#include "bits/simd_reductions.h"
-#include "bits/simd_alg.h"
-#include "bits/simd_bit.h"
+#include <bits/simd_vec.h>
+#include <bits/simd_loadstore.h>
+#include <bits/simd_mask_reductions.h>
+#include <bits/simd_reductions.h>
+#include <bits/simd_alg.h>
+#include <bits/simd_bit.h>
 #ifdef __glibcxx_simd_complex
-#include "bits/simd_complex.h"
+#include <bits/simd_complex.h>
 #endif
-#include "bits/simd_math.h"
+#include <bits/simd_math.h>
+#include <bits/range_access.h>
 
 #endif
 #endif
diff --git a/libstdc++-v3/testsuite/std/simd/traits_common.cc 
b/libstdc++-v3/testsuite/std/simd/traits_common.cc
index 2adaff335b41..b83cf56ecf29 100644
--- a/libstdc++-v3/testsuite/std/simd/traits_common.cc
+++ b/libstdc++-v3/testsuite/std/simd/traits_common.cc
@@ -372,6 +372,14 @@ static_assert([] { simd::vec<float> x = {}; return 
x.begin() - x.end(); }() == -
 static_assert([] { simd::vec<float> x = {}; return x.begin() - x.begin(); }() 
== 0);
 static_assert([] { simd::vec<float> x = {}; return x.begin() + 1 - x.begin(); 
}() == 1);
 static_assert([] { simd::vec<float> x = {}; return x.begin() + 1 - x.cbegin(); 
}() == 1);
+
+static_assert([] { simd::vec<float> x = {}; return std::begin(x) + 
std::size(x) == std::end(x); }());
+static_assert([] { simd::vec<float> x = {}; return std::cend(x) == 
std::cbegin(x) + std::size(x); }());
+static_assert([] { simd::vec<float> x = {}; return std::ranges::begin(x) + 
std::ranges::size(x) == std::ranges::end(x); }());
+static_assert([] { simd::vec<float> x = {}; return std::ranges::cend(x) == 
std::ranges::cbegin(x) + std::ranges::size(x); }());
+static_assert([] { simd::vec<float> x = {}; return std::ranges::rbegin(x) + 
std::ranges::size(x) == std::ranges::rend(x); }());
+static_assert([] { simd::vec<float> x = {}; return std::ranges::crend(x) == 
std::ranges::crbegin(x) + std::ranges::size(x); }());
+
 #endif
 
 // mask to vec ///////////////////////

Reply via email to