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 > > > > > >