Patches pushed.

On Wed, Aug 20, 2025 at 7:17 PM Jonathan Wakely <jwak...@redhat.com> wrote:

> On 21/07/25 17:50 +0200, Luc Grosheintz wrote:
> >This commit implements the C++26 feature std::dims described in P2389R2.
> >It sets the feature testing macro to 202406 and adds tests.
> >
> >Also fixes the test mdspan/version.cc
> >
> >libstdc++-v3/ChangeLog:
> >
> >       * include/bits/version.def (mdspan): Set value for C++26.
> >       * include/bits/version.h: Regenerate.
> >       * include/std/mdspan (dims): Add.
> >       * src/c++23/std.cc.in (dims): Add.
> >       * testsuite/23_containers/mdspan/extents/misc.cc: Add tests.
> >       * testsuite/23_containers/mdspan/version.cc: Update test.
> >
> >Signed-off-by: Luc Grosheintz <luc.groshei...@gmail.com>
>
> OK for trunk.
>
> >---
> > libstdc++-v3/include/bits/version.def                 |  4 ++++
> > libstdc++-v3/include/bits/version.h                   |  7 ++++++-
> > libstdc++-v3/include/std/mdspan                       |  5 +++++
> > libstdc++-v3/src/c++23/std.cc.in                      |  3 +++
> > .../testsuite/23_containers/mdspan/extents/misc.cc    |  7 +++++++
> > .../testsuite/23_containers/mdspan/version.cc         | 11 +++++++----
> > 6 files changed, 32 insertions(+), 5 deletions(-)
> >
> >diff --git a/libstdc++-v3/include/bits/version.def
> b/libstdc++-v3/include/bits/version.def
> >index dbe2cb8f175..e9830d9d685 100644
> >--- a/libstdc++-v3/include/bits/version.def
> >+++ b/libstdc++-v3/include/bits/version.def
> >@@ -1007,6 +1007,10 @@ ftms = {
> >
> > ftms = {
> >   name = mdspan;
> >+  values = {
> >+    v = 202406;
> >+    cxxmin = 26;
> >+  };
> >   values = {
> >     v = 202207;
> >     cxxmin = 23;
> >diff --git a/libstdc++-v3/include/bits/version.h
> b/libstdc++-v3/include/bits/version.h
> >index 7bb6016df68..59b0cfa1f92 100644
> >--- a/libstdc++-v3/include/bits/version.h
> >+++ b/libstdc++-v3/include/bits/version.h
> >@@ -1125,7 +1125,12 @@
> > #undef __glibcxx_want_span
> >
> > #if !defined(__cpp_lib_mdspan)
> >-# if (__cplusplus >= 202100L)
> >+# if (__cplusplus >  202302L)
> >+#  define __glibcxx_mdspan 202406L
> >+#  if defined(__glibcxx_want_all) || defined(__glibcxx_want_mdspan)
> >+#   define __cpp_lib_mdspan 202406L
> >+#  endif
> >+# elif (__cplusplus >= 202100L)
> > #  define __glibcxx_mdspan 202207L
> > #  if defined(__glibcxx_want_all) || defined(__glibcxx_want_mdspan)
> > #   define __cpp_lib_mdspan 202207L
> >diff --git a/libstdc++-v3/include/std/mdspan
> b/libstdc++-v3/include/std/mdspan
> >index 271fdb5d8c7..9afb9304fb5 100644
> >--- a/libstdc++-v3/include/std/mdspan
> >+++ b/libstdc++-v3/include/std/mdspan
> >@@ -414,6 +414,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
> >     using dextents =
> decltype(__mdspan::__build_dextents_type<_IndexType>(
> >       make_index_sequence<_Rank>()));
> >
> >+#if __glibcxx_mdspan >= 202406L
> >+  template<size_t _Rank, typename _IndexType = size_t>
> >+    using dims = dextents<_IndexType, _Rank>;
> >+#endif
> >+
> >   template<typename... _Integrals>
> >     requires (is_convertible_v<_Integrals, size_t> && ...)
> >     explicit extents(_Integrals...) ->
> >diff --git a/libstdc++-v3/src/c++23/std.cc.in b/libstdc++-v3/src/c++23/
> std.cc.in
> >index 9301ed90c00..6d7f3fda060 100644
> >--- a/libstdc++-v3/src/c++23/std.cc.in
> >+++ b/libstdc++-v3/src/c++23/std.cc.in
> >@@ -1851,6 +1851,9 @@ export namespace std
> > {
> >   using std::extents;
> >   using std::dextents;
> >+#if __glibcxx_mdspan >= 202406L
> >+  using std::dims;
> >+#endif
> >   using std::layout_left;
> >   using std::layout_right;
> >   using std::layout_stride;
> >diff --git a/libstdc++-v3/testsuite/23_containers/mdspan/extents/misc.cc
> b/libstdc++-v3/testsuite/23_containers/mdspan/extents/misc.cc
> >index bca8901685d..8a43a682004 100644
> >--- a/libstdc++-v3/testsuite/23_containers/mdspan/extents/misc.cc
> >+++ b/libstdc++-v3/testsuite/23_containers/mdspan/extents/misc.cc
> >@@ -159,6 +159,13 @@ static_assert(std::extents<int, 1,
> dyn>::static_extent(1) == dyn);
> > static_assert(std::extents<int, dyn, dyn>::static_extent(0) == dyn);
> > static_assert(std::extents<int, dyn, dyn>::static_extent(1) == dyn);
> >
> >+// dims
> >+#if __glibcxx_mdspan >= 202406L
> >+static_assert(std::is_same_v<std::dims<0>, std::dextents<size_t, 0>>);
> >+static_assert(std::is_same_v<std::dims<3>, std::dextents<size_t, 3>>);
> >+static_assert(std::is_same_v<std::dims<3, int>, std::dextents<int, 3>>);
> >+#endif
> >+
> > // extent
> > template<typename Extent>
> >   constexpr void
> >diff --git a/libstdc++-v3/testsuite/23_containers/mdspan/version.cc
> b/libstdc++-v3/testsuite/23_containers/mdspan/version.cc
> >index 106ee4010ee..752060262a0 100644
> >--- a/libstdc++-v3/testsuite/23_containers/mdspan/version.cc
> >+++ b/libstdc++-v3/testsuite/23_containers/mdspan/version.cc
> >@@ -1,9 +1,12 @@
> >-// { dg-do compile { target c++23 } }
> >+// { dg-do preprocess { target c++23 } }
> >+// { dg-add-options no_pch }
> >+
> > #include <mdspan>
> >
> > #ifndef __cpp_lib_mdspan
> > #error "Feature test macro __cpp_lib_mdspan is missing for <mdspan>"
> >-#if __cpp_lib_mdspan < 202207
> >-#error "Feature test macro __cpp_lib_mdspan has the wrong value"
> >-#endif
> >+#elif __cplusplus <= 202302L && __cpp_lib_mdspan != 202207L
> >+#error "Feature test macro __cpp_lib_mdspan has the wrong value for
> C++23"
> >+#elif __cplusplus > 202302L && __cpp_lib_mdspan != 202406L
> >+#error "Feature test macro __cpp_lib_mdspan has the wrong value for
> C++26"
> > #endif
> >--
> >2.50.0
> >
> >
>
>

Reply via email to