[gcc r16-8413] libstdc++: Rename std::strided_slice to std::extent_slice.
Tomasz Kaminski
tkaminsk@gcc.gnu.org
Thu Apr 2 08:04:59 GMT 2026
https://gcc.gnu.org/g:c00c750ba27dd86aaf5bc2d06679e30c76826272
commit r16-8413-gc00c750ba27dd86aaf5bc2d06679e30c76826272
Author: Tomasz Kamiński <tkaminsk@redhat.com>
Date: Thu Mar 19 16:35:13 2026 +0100
libstdc++: Rename std::strided_slice to std::extent_slice.
This is last change proposed in P3982R2, so we bump submdspan
value.
libstdc++-v3/ChangeLog:
* include/bits/version.def (submdspan): Update to 202603,
and list all papers in comment.
* include/bits/version.h: Regenerate.
* include/std/mdspan: Replaced std::strided_stride to
std::extent_slice, __is_strided_slice to __is_extent_slice,
_SliceKind::__unit_strided_slice to __unit_stride_slice.
* src/c++23/std.cc.in (std::extent_slice): Replaced
std::strided_slice to std::extent_slice.
* testsuite/23_containers/mdspan/submdspan/canonical_slices.cc:
Replaced all occurences of strided_slice to extent_slice.
* testsuite/23_containers/mdspan/submdspan/canonical_slices_neg.cc:
Likewise.
* testsuite/23_containers/mdspan/submdspan/strided_slice.cc: Move to...
* testsuite/23_containers/mdspan/submdspan/extent_slice.cc: ...here
and handle rename.
* testsuite/23_containers/mdspan/submdspan/strided_slice_neg.cc: Move to...
* testsuite/23_containers/mdspan/submdspan/extent_slice_neg.cc: ...here
and handle rename.
* testsuite/23_containers/mdspan/submdspan/selections/testcases.h:
Replaced all occurences of strided_slice to extent_slice.
* testsuite/23_containers/mdspan/submdspan/subextents.cc: Likewise.
* testsuite/23_containers/mdspan/submdspan/subextents_neg.cc:
Likewise.
* testsuite/23_containers/mdspan/submdspan/submdspan_mapping.cc:
Likewise.
* testsuite/23_containers/mdspan/submdspan/submdspan_neg.cc: Likewise.
Reviewed-by: Jonathan Wakely <jwakely@redhat.com>
Signed-off-by: Tomasz Kamiński <tkaminsk@redhat.com>
Diff:
---
libstdc++-v3/include/bits/version.def | 7 ++-
libstdc++-v3/include/bits/version.h | 4 +-
libstdc++-v3/include/std/mdspan | 56 +++++++++++-----------
libstdc++-v3/src/c++23/std.cc.in | 2 +-
.../mdspan/submdspan/canonical_slices.cc | 26 +++++-----
.../mdspan/submdspan/canonical_slices_neg.cc | 8 ++--
.../{strided_slice.cc => extent_slice.cc} | 12 ++---
.../{strided_slice_neg.cc => extent_slice_neg.cc} | 2 +-
.../mdspan/submdspan/selections/testcases.h | 20 ++++----
.../23_containers/mdspan/submdspan/subextents.cc | 30 ++++++------
.../mdspan/submdspan/subextents_neg.cc | 12 ++---
.../mdspan/submdspan/submdspan_mapping.cc | 32 ++++++-------
.../mdspan/submdspan/submdspan_neg.cc | 40 ++++++++--------
13 files changed, 128 insertions(+), 123 deletions(-)
diff --git a/libstdc++-v3/include/bits/version.def b/libstdc++-v3/include/bits/version.def
index b7d4b3849acb..ada8da88bc52 100644
--- a/libstdc++-v3/include/bits/version.def
+++ b/libstdc++-v3/include/bits/version.def
@@ -1117,8 +1117,13 @@ ftms = {
ftms = {
name = submdspan;
+ // 202306 P2630R4 Submdspan
+ // 202403 P2642R6 Padded mdspan layouts
+ // 202411 P3355R1 Fix submdspan for C++26
+ // 202511 P3663R3 Future-proof submdspan-mapping
+ // 202603 P3982R1 Split strided_slice into extent_slice and range_slice for C++26
values = {
- v = 202411;
+ v = 202603;
cxxmin = 26;
extra_cond = "__glibcxx_constant_wrapper >= 202506L";
};
diff --git a/libstdc++-v3/include/bits/version.h b/libstdc++-v3/include/bits/version.h
index c2219bedb5f8..0490e79dd416 100644
--- a/libstdc++-v3/include/bits/version.h
+++ b/libstdc++-v3/include/bits/version.h
@@ -1243,9 +1243,9 @@
#if !defined(__cpp_lib_submdspan)
# if (__cplusplus > 202302L) && (__glibcxx_constant_wrapper >= 202506L)
-# define __glibcxx_submdspan 202411L
+# define __glibcxx_submdspan 202603L
# if defined(__glibcxx_want_all) || defined(__glibcxx_want_submdspan)
-# define __cpp_lib_submdspan 202411L
+# define __cpp_lib_submdspan 202603L
# endif
# endif
#endif /* !defined(__cpp_lib_submdspan) */
diff --git a/libstdc++-v3/include/std/mdspan b/libstdc++-v3/include/std/mdspan
index 5b80de2ca619..f30c5e83d164 100644
--- a/libstdc++-v3/include/std/mdspan
+++ b/libstdc++-v3/include/std/mdspan
@@ -356,7 +356,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
inline constexpr full_extent_t full_extent{};
template<typename _OffsetType, typename _ExtentType, typename _StrideType>
- struct strided_slice
+ struct extent_slice
{
static_assert(__is_signed_or_unsigned_integer<_OffsetType>::value
|| __detail::__integral_constant_like<_OffsetType>);
@@ -879,10 +879,10 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
#ifdef __glibcxx_submdspan
template<typename _Tp>
- constexpr bool __is_strided_slice = false;
+ constexpr bool __is_extent_slice = false;
template<typename _OffsetType, typename _ExtentType, typename _StrideType>
- constexpr bool __is_strided_slice<strided_slice<_OffsetType,
+ constexpr bool __is_extent_slice<extent_slice<_OffsetType,
_ExtentType, _StrideType>> = true;
template<typename _Tp>
@@ -921,7 +921,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
template<typename _Slice, typename _IndexType>
concept __acceptable_slice_type = same_as<_Slice, full_extent_t>
|| same_as<_Slice, _IndexType> || __is_constant_wrapper<_Slice>
- || __is_strided_slice<_Slice>;
+ || __is_extent_slice<_Slice>;
template<typename _IndexType, typename... _Slices>
consteval auto
@@ -954,7 +954,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{
if constexpr (same_as<_Slice, full_extent_t>)
return 0;
- else if constexpr (__is_strided_slice<_Slice>)
+ else if constexpr (__is_extent_slice<_Slice>)
return __slice.offset;
else
return __slice; // collapsing slice
@@ -1011,7 +1011,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
constexpr typename _Extents::index_type
__dynamic_slice_extent(const _Extents& __exts, _Slice __slice)
{
- if constexpr (__is_strided_slice<_Slice>)
+ if constexpr (__is_extent_slice<_Slice>)
return __slice.extent;
else
return __exts.extent(_K);
@@ -1125,7 +1125,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{
auto __stride = [&__mapping](size_t __k, auto __slice) -> _IndexType
{
- if constexpr (__is_strided_slice<decltype(__slice)>)
+ if constexpr (__is_extent_slice<decltype(__slice)>)
if (__slice.extent > 1)
return __mapping.stride(__k) * __slice.stride;
return __mapping.stride(__k);
@@ -1169,7 +1169,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__stride *= _Trait::_S_padded_extent(__mapping, __i);
size_t __krev = _SubTrait::_S_idx(__k);
- if constexpr (__is_strided_slice<decltype(__slice)>)
+ if constexpr (__is_extent_slice<decltype(__slice)>)
{
if (__slice.extent > 1)
__ret[__krev] = __stride * __slice.stride;
@@ -1201,19 +1201,19 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
}
template<typename _Slice>
- concept __is_unit_stride_slice = (__mdspan::__is_strided_slice<_Slice>
+ concept __is_unit_stride_slice = (__mdspan::__is_extent_slice<_Slice>
&& __mdspan::__is_constant_wrapper<typename _Slice::stride_type>
&& _Slice::stride_type::value == 1)
|| std::same_as<_Slice, full_extent_t>;
// These are (forced) exclusive categories:
// - full & collapsing: obvious,
- // - unit_strided_slice: strided_slice{a, b, cw<1>}, but not `full`,
- // - strided_slice: strided_slice{a, b, c} with c != cw<1>.
+ // - unit_extent_slice: extent_slice{a, b, cw<1>}, but not `full`,
+ // - extent_slice: extent_slice{a, b, c} with c != cw<1>.
enum class _SliceKind
{
- __strided_slice,
- __unit_strided_slice,
+ __extent_slice,
+ __unit_stride_slice,
__full,
__collapsing
};
@@ -1224,12 +1224,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{
if constexpr (std::same_as<_Slice, full_extent_t>)
return _SliceKind::__full;
- else if constexpr (__mdspan::__is_strided_slice<_Slice>)
+ else if constexpr (__mdspan::__is_extent_slice<_Slice>)
{
if constexpr (__mdspan::__is_unit_stride_slice<_Slice>)
- return _SliceKind::__unit_strided_slice;
+ return _SliceKind::__unit_stride_slice;
else
- return _SliceKind::__strided_slice;
+ return _SliceKind::__extent_slice;
}
else
return _SliceKind::__collapsing;
@@ -1260,7 +1260,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
auto __last = __slice_kinds[__block_size - 1];
return __last == _SliceKind::__full
- || __last == _SliceKind::__unit_strided_slice;
+ || __last == _SliceKind::__unit_stride_slice;
}
// __u __u + __sub_rank-2
@@ -1270,7 +1270,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
size_t __sub_rank)
{
if (__slice_kinds[0] != _SliceKind::__full
- && __slice_kinds[0] != _SliceKind::__unit_strided_slice)
+ && __slice_kinds[0] != _SliceKind::__unit_stride_slice)
return dynamic_extent;
else if (__slice_kinds.size() == 1)
return dynamic_extent;
@@ -1361,7 +1361,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
size_t __sub_rank)
{
if (__sub_rank == 1)
- return __slice_kinds[0] == _SliceKind::__unit_strided_slice
+ return __slice_kinds[0] == _SliceKind::__unit_stride_slice
|| __slice_kinds[0] == _SliceKind::__full;
else
return false;
@@ -1429,7 +1429,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
size_t __sub_rank)
{
if (__sub_rank == 1)
- return __slice_kinds[_Nm - 1] == _SliceKind::__unit_strided_slice
+ return __slice_kinds[_Nm - 1] == _SliceKind::__unit_stride_slice
|| __slice_kinds[_Nm - 1] == _SliceKind::__full;
else
return false;
@@ -3299,7 +3299,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{
if constexpr (is_same_v<_SpanType, constant_wrapper<_IndexType(0)>>
|| is_same_v<_StrideType, constant_wrapper<_IndexType(1)>>)
- return strided_slice{
+ return extent_slice{
.offset = __offset,
.extent = __span,
.stride = cw<_IndexType(1)>
@@ -3308,20 +3308,20 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{
static_assert(_StrideType::value > 0);
if constexpr (__is_constant_wrapper<_SpanType>)
- return strided_slice{
+ return extent_slice{
.offset = __offset,
.extent = cw<_IndexType(1 + (_SpanType::value - 1) / _StrideType::value)>,
.stride = __stride
};
else
- return strided_slice{
+ return extent_slice{
.offset = __offset,
.extent = _IndexType(__span > 0 ? 1 + (__span - 1) / _StrideType::value : 0),
.stride = __stride
};
}
else if (__span == 0 || __stride == 1)
- return strided_slice{
+ return extent_slice{
.offset = __offset,
.extent = _IndexType(__span),
.stride = _IndexType(1)
@@ -3329,7 +3329,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
else
{
__glibcxx_assert(__stride > 0);
- return strided_slice{
+ return extent_slice{
.offset = __offset,
.extent = _IndexType(1 + (__span - 1) / __stride),
.stride = __stride
@@ -3346,8 +3346,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
return static_cast<full_extent_t>(std::move(__slice));
else if constexpr (is_convertible_v<_SliceType, _IndexType>)
return __mdspan::__canonical_index<_IndexType>(std::move(__slice));
- else if constexpr (__is_strided_slice<_SliceType>)
- return strided_slice{
+ else if constexpr (__is_extent_slice<_SliceType>)
+ return extent_slice{
.offset = __mdspan::__canonical_index<_IndexType>(std::move(__slice.offset)),
.extent = __mdspan::__canonical_index<_IndexType>(std::move(__slice.extent)),
.stride = __mdspan::__canonical_index<_IndexType>(std::move(__slice.stride))
@@ -3412,7 +3412,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
__check_valid_slice(const extents<_IndexType, _Extent>& __ext,
const _Slice& __slice)
{
- if constexpr (__is_strided_slice<_Slice>)
+ if constexpr (__is_extent_slice<_Slice>)
{
__mdspan::__check_valid_index(__ext, __slice.extent);
// DEVIATION: For empty slices, P3663r3 does not allow us to check
diff --git a/libstdc++-v3/src/c++23/std.cc.in b/libstdc++-v3/src/c++23/std.cc.in
index 32e167be0c1c..a7e88945c2f9 100644
--- a/libstdc++-v3/src/c++23/std.cc.in
+++ b/libstdc++-v3/src/c++23/std.cc.in
@@ -1914,7 +1914,7 @@ export namespace std
using std::layout_right_padded;
#endif
#if __glibcxx_submdspan
- using std::strided_slice;
+ using std::extent_slice;
using std::range_slice;
using std::full_extent_t;
using std::full_extent;
diff --git a/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/canonical_slices.cc b/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/canonical_slices.cc
index 7e6a0791af7d..d747ad40de21 100644
--- a/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/canonical_slices.cc
+++ b/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/canonical_slices.cc
@@ -242,7 +242,7 @@ test_triple_all()
}
constexpr bool
-test_strided_slice(auto exts, auto co, auto ce, auto cs)
+test_extent_slice(auto exts, auto co, auto ce, auto cs)
{
using IndexType = decltype(exts)::index_type;
@@ -250,25 +250,25 @@ test_strided_slice(auto exts, auto co, auto ce, auto cs)
auto cextent = std::cw<IndexType{ce.value}>;
auto cstride = std::cw<IndexType{cs.value}>;
- auto raw_ccc = std::strided_slice{co, ce, cs};
+ auto raw_ccc = std::extent_slice{co, ce, cs};
auto [ccc] = std::canonical_slices(exts, raw_ccc);
assert_same(ccc.offset, coffset);
assert_same(ccc.extent, cextent);
assert_same(ccc.stride, cstride);
- auto raw_dcc = std::strided_slice{co.value, ce, cs};
+ auto raw_dcc = std::extent_slice{co.value, ce, cs};
auto [dcc] = std::canonical_slices(exts, raw_dcc);
assert_same(dcc.offset, coffset.value);
assert_same(dcc.extent, cextent);
assert_same(dcc.stride, cstride);
- auto raw_cdc = std::strided_slice{co, ce.value, cs};
+ auto raw_cdc = std::extent_slice{co, ce.value, cs};
auto [cdc] = std::canonical_slices(exts, raw_cdc);
assert_same(cdc.offset, coffset);
assert_same(cdc.extent, cextent.value);
assert_same(cdc.stride, cstride);
- auto raw_ccd = std::strided_slice{co, ce, cs.value};
+ auto raw_ccd = std::extent_slice{co, ce, cs.value};
auto [ccd] = std::canonical_slices(exts, raw_ccd);
assert_same(ccd.offset, coffset);
assert_same(ccd.extent, cextent);
@@ -277,17 +277,17 @@ test_strided_slice(auto exts, auto co, auto ce, auto cs)
}
constexpr bool
-test_strided_slice()
+test_extent_slice()
{
auto run = [](auto exts)
{
auto cs = std::cw<uint8_t{1}>;
- test_strided_slice(exts, std::cw<uint8_t{2}>, std::cw<uint8_t{2}>, std::cw<uint8_t{2}>);
- test_strided_slice(exts, std::cw<uint8_t{0}>, std::cw<uint8_t{5}>, std::cw<uint8_t{1}>);
- test_strided_slice(exts, std::cw<uint8_t{0}>, std::cw<uint8_t{0}>, std::cw<uint8_t{1}>);
- test_strided_slice(exts, std::cw<uint8_t{0}>, std::cw<uint8_t{0}>, std::cw<uint8_t{3}>);
- test_strided_slice(exts, std::cw<uint8_t{0}>, std::cw<uint8_t{0}>, std::cw<uint8_t{0}>);
- test_strided_slice(exts, std::cw<uint8_t{0}>, std::cw<uint8_t{0}>, std::cw<uint8_t{9}>);
+ test_extent_slice(exts, std::cw<uint8_t{2}>, std::cw<uint8_t{2}>, std::cw<uint8_t{2}>);
+ test_extent_slice(exts, std::cw<uint8_t{0}>, std::cw<uint8_t{5}>, std::cw<uint8_t{1}>);
+ test_extent_slice(exts, std::cw<uint8_t{0}>, std::cw<uint8_t{0}>, std::cw<uint8_t{1}>);
+ test_extent_slice(exts, std::cw<uint8_t{0}>, std::cw<uint8_t{0}>, std::cw<uint8_t{3}>);
+ test_extent_slice(exts, std::cw<uint8_t{0}>, std::cw<uint8_t{0}>, std::cw<uint8_t{0}>);
+ test_extent_slice(exts, std::cw<uint8_t{0}>, std::cw<uint8_t{0}>, std::cw<uint8_t{9}>);
};
run(std::extents<int, 5>{});
@@ -301,7 +301,7 @@ test_all()
test_scalar();
test_pair_all();
test_triple_all();
- test_strided_slice();
+ test_extent_slice();
return true;
}
diff --git a/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/canonical_slices_neg.cc b/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/canonical_slices_neg.cc
index 3923d5393b9e..5c61e938da5e 100644
--- a/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/canonical_slices_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/canonical_slices_neg.cc
@@ -65,7 +65,7 @@ template<typename Offset, typename Extent, typename Stride, typename Extents>
constexpr bool
test_under2(Offset o, Extent e, Stride s, Extents exts)
{
- std::canonical_slices(exts, std::strided_slice{o, e, s});
+ std::canonical_slices(exts, std::extent_slice{o, e, s});
return true;
}
@@ -105,7 +105,7 @@ template<typename Offset, typename Extent, typename Stride, typename Extents>
constexpr bool
test_over2(Offset o, Extent e, Stride s, Extents exts)
{
- std::canonical_slices(exts, std::strided_slice{o, e, s});
+ std::canonical_slices(exts, std::extent_slice{o, e, s});
return true;
}
@@ -189,7 +189,7 @@ constexpr bool
test_overflow1(auto o, auto e)
{
auto exts = std::extents<uint8_t, dyn>{255};
- auto slice = std::strided_slice{o, e, 1};
+ auto slice = std::extent_slice{o, e, 1};
std::canonical_slices(exts, slice);
return true;
}
@@ -224,7 +224,7 @@ constexpr bool
test_invalid(auto e, auto s)
{
auto exts = std::extents(5);
- auto slice = std::strided_slice(0, e, s);
+ auto slice = std::extent_slice(0, e, s);
std::canonical_slices(exts, slice);
return true;
}
diff --git a/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/strided_slice.cc b/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/extent_slice.cc
similarity index 67%
rename from libstdc++-v3/testsuite/23_containers/mdspan/submdspan/strided_slice.cc
rename to libstdc++-v3/testsuite/23_containers/mdspan/submdspan/extent_slice.cc
index 6fa5aaa2f1ed..1a2a5b213990 100644
--- a/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/strided_slice.cc
+++ b/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/extent_slice.cc
@@ -5,9 +5,9 @@
#include <testsuite_hooks.h>
constexpr void
-check_strided_slice(auto s, auto offset, auto extent, auto stride)
+check_extent_slice(auto s, auto offset, auto extent, auto stride)
{
- using slice_type = std::strided_slice<decltype(offset), decltype(extent),
+ using slice_type = std::extent_slice<decltype(offset), decltype(extent),
decltype(stride)>;
static_assert(std::same_as<decltype(s), slice_type>);
VERIFY(s.offset == offset);
@@ -20,12 +20,12 @@ test_initializers(auto offset, auto extent, auto stride)
{
auto check = [&](auto s)
{
- check_strided_slice(s, offset, extent, stride);
+ check_extent_slice(s, offset, extent, stride);
};
- check(std::strided_slice{.offset=offset, .extent=extent, .stride=stride});
- check(std::strided_slice{offset, extent, stride});
- check(std::strided_slice(offset, extent, stride));
+ check(std::extent_slice{.offset=offset, .extent=extent, .stride=stride});
+ check(std::extent_slice{offset, extent, stride});
+ check(std::extent_slice(offset, extent, stride));
}
constexpr bool
diff --git a/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/strided_slice_neg.cc b/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/extent_slice_neg.cc
similarity index 84%
rename from libstdc++-v3/testsuite/23_containers/mdspan/submdspan/strided_slice_neg.cc
rename to libstdc++-v3/testsuite/23_containers/mdspan/submdspan/extent_slice_neg.cc
index 0f1d791d13aa..9740b37668a0 100644
--- a/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/strided_slice_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/extent_slice_neg.cc
@@ -7,7 +7,7 @@ template<typename OffsetType, typename ExtentType, typename StrideType>
constexpr bool
test_invalid()
{
- auto s1 = std::strided_slice(OffsetType{}, ExtentType{}, StrideType{}); // { dg-error "required from" }
+ auto s1 = std::extent_slice(OffsetType{}, ExtentType{}, StrideType{}); // { dg-error "required from" }
return true;
}
diff --git a/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/selections/testcases.h b/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/selections/testcases.h
index eade9017e039..536d2ad51742 100644
--- a/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/selections/testcases.h
+++ b/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/selections/testcases.h
@@ -9,10 +9,10 @@ constexpr size_t dyn = std::dynamic_extent;
constexpr auto all = std::full_extent;
template<typename T>
- constexpr bool is_strided_slice = false;
+ constexpr bool is_extent_slice = false;
template<typename O, typename E, typename S>
- constexpr bool is_strided_slice<std::strided_slice<O, E, S>> = true;
+ constexpr bool is_extent_slice<std::extent_slice<O, E, S>> = true;
template<typename MDSpan>
constexpr void
@@ -151,7 +151,7 @@ template<typename IndexType, typename Slice>
std::ranges::iota(ret, 0);
return ret;
}
- else if constexpr (is_strided_slice<Slice>)
+ else if constexpr (is_extent_slice<Slice>)
{
auto ret = std::vector<IndexType>{};
size_t n = static_cast<size_t>(slice.extent);
@@ -292,10 +292,10 @@ template<typename Layout>
check_selection<Layout>(exts, collapse{}, s, collapse{});
};
- check(std::strided_slice(0, 1, 2));
- check(std::strided_slice(0, 2, 2));
- check(std::strided_slice(1, 2, 2));
- check(std::strided_slice(1, std::cw<2>, std::cw<2>));
+ check(std::extent_slice(0, 1, 2));
+ check(std::extent_slice(0, 2, 2));
+ check(std::extent_slice(1, 2, 2));
+ check(std::extent_slice(1, std::cw<2>, std::cw<2>));
return true;
}
@@ -303,9 +303,9 @@ template<typename Layout>
constexpr bool
test_strided_box_selection(auto exts)
{
- auto s0 = std::strided_slice(0, 2, 2);
- auto s1 = std::strided_slice(1, 2, 2);
- auto s2 = std::strided_slice(0, 3, 3);
+ auto s0 = std::extent_slice(0, 2, 2);
+ auto s1 = std::extent_slice(1, 2, 2);
+ auto s2 = std::extent_slice(0, 3, 3);
check_selection<Layout>(exts, s0, s1, s2);
return true;
diff --git a/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/subextents.cc b/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/subextents.cc
index 379fb79dfc23..35927a0276e6 100644
--- a/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/subextents.cc
+++ b/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/subextents.cc
@@ -82,13 +82,13 @@ template<typename Int>
template<template<int> typename Cw>
constexpr bool
- test_from_strided_slice()
+ test_from_extent_slice()
{
auto exts = std::extents<int, 5, 7, 11>{};
{
auto s0 = 1;
- auto s1 = std::strided_slice{0, 0, 0};
- auto s2 = std::strided_slice{1, Cw<0>{}, 0};
+ auto s1 = std::extent_slice{0, 0, 0};
+ auto s2 = std::extent_slice{1, Cw<0>{}, 0};
auto sub_exts = std::subextents(exts, s0, s1, s2);
VERIFY(sub_exts.rank() == 2);
VERIFY(sub_exts.static_extent(0) == dyn);
@@ -98,8 +98,8 @@ template<template<int> typename Cw>
{
auto s0 = 1;
- auto s1 = std::strided_slice{0, 2, Cw<1>{}};
- auto s2 = std::strided_slice{1, Cw<2>{}, 1};
+ auto s1 = std::extent_slice{0, 2, Cw<1>{}};
+ auto s2 = std::extent_slice{1, Cw<2>{}, 1};
auto sub_exts = std::subextents(exts, s0, s1, s2);
VERIFY(sub_exts.rank() == 2);
VERIFY(sub_exts.static_extent(0) == dyn);
@@ -110,8 +110,8 @@ template<template<int> typename Cw>
{
// selected = 1 x [1, 3] x [1, 4, 7, 10]
auto s0 = 1;
- auto s1 = std::strided_slice{1, Cw<2>{}, 2};
- auto s2 = std::strided_slice{1, Cw<4>{}, Cw<3>{}};
+ auto s1 = std::extent_slice{1, Cw<2>{}, 2};
+ auto s2 = std::extent_slice{1, Cw<4>{}, Cw<3>{}};
auto sub_exts = std::subextents(exts, s0, s1, s2);
VERIFY(sub_exts.rank() == 2);
VERIFY(sub_exts.static_extent(0) == 2);
@@ -120,9 +120,9 @@ template<template<int> typename Cw>
{
// selected = [0, 2] x [1, 3] x [0, 3, 6]
- auto s0 = std::strided_slice(0, 2, 2);
- auto s1 = std::strided_slice(1, 2, 2);
- auto s2 = std::strided_slice(0, 3, 3);
+ auto s0 = std::extent_slice(0, 2, 2);
+ auto s1 = std::extent_slice(1, 2, 2);
+ auto s2 = std::extent_slice(0, 3, 3);
auto sub_exts = std::subextents(exts, s0, s1, s2);
VERIFY(sub_exts.rank() == 3);
VERIFY(sub_exts.extent(0) == 2);
@@ -132,9 +132,9 @@ template<template<int> typename Cw>
{
// selected = [0] x [1] x [2]
- auto s0 = std::strided_slice(0, 1, 99);
- auto s1 = std::strided_slice(1, 1, 99);
- auto s2 = std::strided_slice(2, 1, 99);
+ auto s0 = std::extent_slice(0, 1, 99);
+ auto s1 = std::extent_slice(1, 1, 99);
+ auto s2 = std::extent_slice(2, 1, 99);
auto sub_exts = std::subextents(exts, s0, s1, s2);
VERIFY(sub_exts.rank() == 3);
VERIFY(sub_exts.extent(0) == 1);
@@ -248,8 +248,8 @@ test_all()
test_from_pair_all<IC>();
test_from_const_int<CW>();
test_from_const_int<IC>();
- test_from_strided_slice<CW>();
- test_from_strided_slice<IC>();
+ test_from_extent_slice<CW>();
+ test_from_extent_slice<IC>();
test_from_triple_all<CW>();
test_from_triple_all<IC>();
test_from_int_like_in_tuple<StructuralInt>();
diff --git a/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/subextents_neg.cc b/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/subextents_neg.cc
index 5b11424680df..2ff419ec50cd 100644
--- a/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/subextents_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/subextents_neg.cc
@@ -19,7 +19,7 @@ constexpr bool
test_invalid_stride_zero()
{
auto exts = std::extents(3, 5, 7);
- auto s = std::strided_slice{0, 2, 0};
+ auto s = std::extent_slice{0, 2, 0};
auto sub_exts = std::subextents(exts, 1, s, 2); // { dg-error "expansion of" }
return true;
}
@@ -33,13 +33,13 @@ test_out_of_bounds(const Slice& slice)
auto sub_exts = std::subextents(exts, 1, slice, 2); // { dg-error "expansion of" }
return true;
}
-static_assert(test_out_of_bounds(std::strided_slice{0, 6, 1})); // { dg-error "expansion of" }
-static_assert(test_out_of_bounds(std::strided_slice{0, 4, 2})); // { dg-error "expansion of" }
-static_assert(test_out_of_bounds(std::strided_slice{1, 6, 1})); // { dg-error "expansion of" }
-static_assert(test_out_of_bounds(std::strided_slice{1, 4, 2})); // { dg-error "expansion of" }
+static_assert(test_out_of_bounds(std::extent_slice{0, 6, 1})); // { dg-error "expansion of" }
+static_assert(test_out_of_bounds(std::extent_slice{0, 4, 2})); // { dg-error "expansion of" }
+static_assert(test_out_of_bounds(std::extent_slice{1, 6, 1})); // { dg-error "expansion of" }
+static_assert(test_out_of_bounds(std::extent_slice{1, 4, 2})); // { dg-error "expansion of" }
static_assert(test_out_of_bounds(std::tuple{1, 6})); // { dg-error "expansion of" }
static_assert(test_out_of_bounds(std::tuple{std::cw<1>, std::cw<6>})); // { dg-error "expansion of" }
-static_assert(test_out_of_bounds(std::strided_slice{-1, 2, 1})); // { dg-error "expansion of" }
+static_assert(test_out_of_bounds(std::extent_slice{-1, 2, 1})); // { dg-error "expansion of" }
static_assert(test_out_of_bounds(std::tuple{-1, 2})); // { dg-error "expansion of" }
// { dg-prune-output "cannot decompose class type 'NotASlice'" }
diff --git a/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/submdspan_mapping.cc b/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/submdspan_mapping.cc
index efd71d10f9d9..f52d752079ed 100644
--- a/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/submdspan_mapping.cc
+++ b/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/submdspan_mapping.cc
@@ -34,7 +34,7 @@ template<typename Layout>
auto exts = Traits::make_extents(std::dims<5, int>(3, 5, 7, 11, 13));
auto m = typename Layout::mapping(exts);
- auto s251 = std::strided_slice{2, 5, std::cw<1>};
+ auto s251 = std::extent_slice{2, 5, std::cw<1>};
{
auto slices = std::tuple{0, 0, 0, 0, 0};
@@ -44,7 +44,7 @@ template<typename Layout>
}
{
- auto s0 = std::strided_slice{1, 1, std::cw<1>};
+ auto s0 = std::extent_slice{1, 1, std::cw<1>};
auto slices = std::tuple{s0, all, all, s251, 0};
auto result = call_submdspan_mapping(m, Traits::make_tuple(slices));
using layout_type = typename decltype(result.mapping)::layout_type;
@@ -52,7 +52,7 @@ template<typename Layout>
}
{
- auto s0 = std::strided_slice{1, 2, std::cw<1>};
+ auto s0 = std::extent_slice{1, 2, std::cw<1>};
auto slices = std::tuple{s0, all, all, s251, 0};
auto result = call_submdspan_mapping(m, Traits::make_tuple(slices));
using layout_type = typename decltype(result.mapping)::layout_type;
@@ -60,7 +60,7 @@ template<typename Layout>
}
{
- auto s0 = std::strided_slice{1, 2, std::cw<1>};
+ auto s0 = std::extent_slice{1, 2, std::cw<1>};
auto slices = std::tuple{s0, 0, all, s251, 0};
auto result = call_submdspan_mapping(m, Traits::make_tuple(slices));
using layout_type = typename decltype(result.mapping)::layout_type;
@@ -68,7 +68,7 @@ template<typename Layout>
}
{
- auto s0 = std::strided_slice{1, 2, 1};
+ auto s0 = std::extent_slice{1, 2, 1};
auto slices = std::tuple{s0, all, all, s251, 0};
auto result = call_submdspan_mapping(m, Traits::make_tuple(slices));
using layout_type = decltype(result.mapping)::layout_type;
@@ -83,7 +83,7 @@ template<typename Layout>
}
{
- auto s3 = std::strided_slice{2, std::cw<7>, std::cw<2>};
+ auto s3 = std::extent_slice{2, std::cw<7>, std::cw<2>};
auto slices = std::tuple{all, all, all, s3, 0};
auto result = call_submdspan_mapping(m, Traits::make_tuple(slices));
using layout_type = decltype(result.mapping)::layout_type;
@@ -101,7 +101,7 @@ template<typename Layout>
auto exts = Traits::make_extents(std::dims<5, int>(3, 5, 7, 11, 13));
auto m = typename Layout::mapping(exts);
- auto s251 = std::strided_slice{2, 5, std::cw<1>};
+ auto s251 = std::extent_slice{2, 5, std::cw<1>};
{
auto slices = std::tuple{all, all, all, s251, 0};
@@ -121,7 +121,7 @@ template<typename Layout>
auto exts = Traits::make_extents(std::dims<5, int>(3, 5, 7, 11, 13));
auto m = typename Layout::mapping(exts);
- auto s251 = std::strided_slice{2, 5, std::cw<1>};
+ auto s251 = std::extent_slice{2, 5, std::cw<1>};
{
auto slices = std::tuple{all, all, all, s251, 0};
@@ -140,7 +140,7 @@ template<typename Layout>
}
{
- auto s121 = std::strided_slice{1, 2, std::cw<1>};
+ auto s121 = std::extent_slice{1, 2, std::cw<1>};
auto slices = std::tuple{s121, 0, 0, 0, 0};
auto result = call_submdspan_mapping(m, Traits::make_tuple(slices));
using layout_type = typename decltype(result.mapping)::layout_type;
@@ -149,7 +149,7 @@ template<typename Layout>
}
{
- auto s121 = std::strided_slice{1, 2, std::cw<1>};
+ auto s121 = std::extent_slice{1, 2, std::cw<1>};
auto slices = std::tuple{0, s121, 0, 0, 0};
auto result = call_submdspan_mapping(m, Traits::make_tuple(slices));
using layout_type = typename decltype(result.mapping)::layout_type;
@@ -163,8 +163,8 @@ template<typename Layout>
test_layout_unpadded_padding_value()
{
using Traits = LayoutTraits<DeducePaddingSide::from_typename<Layout>()>;
- auto s0 = std::strided_slice{size_t(1), size_t(2), std::cw<size_t(1)>};
- auto s3 = std::strided_slice{size_t(2), size_t(5), std::cw<size_t(1)>};
+ auto s0 = std::extent_slice{size_t(1), size_t(2), std::cw<size_t(1)>};
+ auto s3 = std::extent_slice{size_t(2), size_t(5), std::cw<size_t(1)>};
auto check = [&](auto exts, size_t expected)
{
@@ -196,8 +196,8 @@ template<typename Layout>
test_layout_padded_padding_value()
{
using Traits = LayoutTraits<DeducePaddingSide::from_typename<Layout>()>;
- auto s0 = std::strided_slice{size_t(1), size_t(2), std::cw<size_t(1)>};
- auto s3 = std::strided_slice{size_t(2), size_t(5), std::cw<size_t(1)>};
+ auto s0 = std::extent_slice{size_t(1), size_t(2), std::cw<size_t(1)>};
+ auto s3 = std::extent_slice{size_t(2), size_t(5), std::cw<size_t(1)>};
auto check = [&](auto exts, size_t expected)
{
@@ -235,8 +235,8 @@ test_layout_stride_return_types()
auto m = std::layout_stride::mapping(exts, std::array{2, 12});
using index_type = decltype(exts)::index_type;
- auto s1 = std::strided_slice{index_type(2), index_type(2),
- std::cw<index_type(2)>};
+ auto s1 = std::extent_slice{index_type(2), index_type(2),
+ std::cw<index_type(2)>};
auto result = submdspan_mapping(m, index_type(1), s1);
using layout_type = decltype(result.mapping)::layout_type;
static_assert(std::same_as<layout_type, std::layout_stride>);
diff --git a/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/submdspan_neg.cc b/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/submdspan_neg.cc
index 74fccc6f014b..8e673a084339 100644
--- a/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/submdspan_neg.cc
+++ b/libstdc++-v3/testsuite/23_containers/mdspan/submdspan/submdspan_neg.cc
@@ -73,47 +73,47 @@ static_assert(test_tuple_over<std::layout_stride>()); // { dg-error "expansion o
template<typename Layout>
constexpr bool
- test_strided_slice_zero()
+ test_extent_slice_zero()
{
- check_slice_range<Layout>(1, std::strided_slice{1, 2, 0}, 2); // { dg-error "expansion of" }
+ check_slice_range<Layout>(1, std::extent_slice{1, 2, 0}, 2); // { dg-error "expansion of" }
return true;
}
-static_assert(test_strided_slice_zero<std::layout_left>()); // { dg-error "expansion of" }
-static_assert(test_strided_slice_zero<std::layout_right>()); // { dg-error "expansion of" }
-static_assert(test_strided_slice_zero<std::layout_stride>()); // { dg-error "expansion of" }
+static_assert(test_extent_slice_zero<std::layout_left>()); // { dg-error "expansion of" }
+static_assert(test_extent_slice_zero<std::layout_right>()); // { dg-error "expansion of" }
+static_assert(test_extent_slice_zero<std::layout_stride>()); // { dg-error "expansion of" }
template<typename Layout>
constexpr bool
- test_strided_slice_offset_under()
+ test_extent_slice_offset_under()
{
- check_slice_range<Layout>(1, std::strided_slice{-1, 1, 1}, 2); // { dg-error "expansion of" }
+ check_slice_range<Layout>(1, std::extent_slice{-1, 1, 1}, 2); // { dg-error "expansion of" }
return true;
}
-static_assert(test_strided_slice_offset_under<std::layout_left>()); // { dg-error "expansion of" }
-static_assert(test_strided_slice_offset_under<std::layout_right>()); // { dg-error "expansion of" }
-static_assert(test_strided_slice_offset_under<std::layout_stride>()); // { dg-error "expansion of" }
+static_assert(test_extent_slice_offset_under<std::layout_left>()); // { dg-error "expansion of" }
+static_assert(test_extent_slice_offset_under<std::layout_right>()); // { dg-error "expansion of" }
+static_assert(test_extent_slice_offset_under<std::layout_stride>()); // { dg-error "expansion of" }
template<typename Layout>
constexpr bool
- test_strided_slice_offset_over()
+ test_extent_slice_offset_over()
{
- check_slice_range<Layout>(1, std::strided_slice{6, 0, 1}, 2); // { dg-error "expansion of" }
+ check_slice_range<Layout>(1, std::extent_slice{6, 0, 1}, 2); // { dg-error "expansion of" }
return true;
}
-static_assert(test_strided_slice_offset_over<std::layout_left>()); // { dg-error "expansion of" }
-static_assert(test_strided_slice_offset_over<std::layout_right>()); // { dg-error "expansion of" }
-static_assert(test_strided_slice_offset_over<std::layout_stride>()); // { dg-error "expansion of" }
+static_assert(test_extent_slice_offset_over<std::layout_left>()); // { dg-error "expansion of" }
+static_assert(test_extent_slice_offset_over<std::layout_right>()); // { dg-error "expansion of" }
+static_assert(test_extent_slice_offset_over<std::layout_stride>()); // { dg-error "expansion of" }
template<typename Layout>
constexpr bool
- test_strided_slice_extent_over()
+ test_extent_slice_extent_over()
{
- check_slice_range<Layout>(1, std::strided_slice{1, 5, 1}, 2); // { dg-error "expansion of" }
+ check_slice_range<Layout>(1, std::extent_slice{1, 5, 1}, 2); // { dg-error "expansion of" }
return true;
}
-static_assert(test_strided_slice_extent_over<std::layout_left>()); // { dg-error "expansion of" }
-static_assert(test_strided_slice_extent_over<std::layout_right>()); // { dg-error "expansion of" }
-static_assert(test_strided_slice_extent_over<std::layout_stride>()); // { dg-error "expansion of" }
+static_assert(test_extent_slice_extent_over<std::layout_left>()); // { dg-error "expansion of" }
+static_assert(test_extent_slice_extent_over<std::layout_right>()); // { dg-error "expansion of" }
+static_assert(test_extent_slice_extent_over<std::layout_stride>()); // { dg-error "expansion of" }
// { dg-prune-output "static assertion failed" }
// { dg-prune-output "__glibcxx_assert_fail" }
More information about the Libstdc++-cvs
mailing list