&& convertible_to<_Tp, decltype(_Tp::value)>
&& equality_comparable_with<_Tp, decltype(_Tp::value)>
diff --git a/libstdc++-v3/testsuite/23_containers/mdspan/extents/misc.cc
b/libstdc++-v3/testsuite/23_containers/mdspan/extents/misc.cc
index 8a43a682004..018c4f95930 100644
--- a/libstdc++-v3/testsuite/23_containers/mdspan/extents/misc.cc
+++ b/libstdc++-v3/testsuite/23_containers/mdspan/extents/misc.cc
@@ -98,7 +98,7 @@ test_deduction(Extents... exts)
}
constexpr bool
-test_integral_constant_deduction()
+test_deduction_from_constant()
{
auto verify = [](auto actual, auto expected)
{
@@ -106,13 +106,21 @@ test_integral_constant_deduction()
VERIFY(actual == expected);
};
- constexpr auto c1 = std::integral_constant<size_t, 1>{};
- constexpr auto c2 = std::integral_constant<int, 2>{};
+ constexpr auto i1 = std::integral_constant<size_t, 1>{};
+ constexpr auto i2 = std::integral_constant<int, 2>{};
verify(std::extents(1), std::extents<size_t, dyn>{1});
- verify(std::extents(c1), std::extents<size_t, 1>{});
+ verify(std::extents(i1), std::extents<size_t, 1>{});
+ verify(std::extents(i2), std::extents<size_t, 2>{});
+ verify(std::extents(i1, 2), std::extents<size_t, 1, dyn>{2});
+
+#if __glibcxx_constant_wrapper
+ constexpr auto c2 = std::constant_wrapper<2>{};
verify(std::extents(c2), std::extents<size_t, 2>{});
- verify(std::extents(c1, 2), std::extents<size_t, 1, dyn>{2});
+ verify(std::extents(1, c2), std::extents<size_t, dyn, 2>{1});
+ verify(std::extents(std::cw<2>), std::extents<size_t, 2>{});
+ verify(std::extents(1, std::cw<2>), std::extents<size_t, dyn, 2>{1});
+#endif
return true;
}
@@ -123,7 +131,7 @@ test_deduction_all()
test_deduction<1>(1);
test_deduction<2>(1.0, 2.0f);
test_deduction<3>(int(1), short(2), size_t(3));
- test_integral_constant_deduction();
+ test_deduction_from_constant();
return true;
}
diff --git a/libstdc++-v3/testsuite/23_containers/mdspan/mdspan.cc
b/libstdc++-v3/testsuite/23_containers/mdspan/mdspan.cc
index bdfc6ebcf56..2583047413c 100644
--- a/libstdc++-v3/testsuite/23_containers/mdspan/mdspan.cc
+++ b/libstdc++-v3/testsuite/23_containers/mdspan/mdspan.cc
@@ -280,7 +280,7 @@ test_from_pointer_and_shape()
}
constexpr bool
-test_from_pointer_and_integral_constant()
+test_from_pointer_and_constant()
{
std::array<double, 6> buffer{};
double * ptr = buffer.data();
@@ -292,12 +292,18 @@ test_from_pointer_and_integral_constant()
VERIFY(actual.extents() == expected.extents());
};
- auto c3 = std::integral_constant<int, 3>{};
- auto c6 = std::integral_constant<int, 6>{};
+ auto i3 = std::integral_constant<int, 3>{};
+ auto i6 = std::integral_constant<int, 6>{};
verify(std::mdspan(ptr, 6), std::extents(6));
- verify(std::mdspan(ptr, c6), std::extents(c6));
- verify(std::mdspan(ptr, 2, c3), std::extents(2, c3));
+ verify(std::mdspan(ptr, i6), std::extents(i6));
+ verify(std::mdspan(ptr, 2, i3), std::extents(2, i3));
+
+#if __glibcxx_constant_wrapper
+ auto c3 = std::constant_wrapper<3>{};
+ verify(std::mdspan(ptr, 2, c3), std::extents(2, i3));
+ verify(std::mdspan(ptr, 2, std::cw<3>), std::extents(2, i3));
+#endif
return true;
}
@@ -729,8 +735,8 @@ main()
test_from_pointer_and_shape();
static_assert(test_from_pointer_and_shape());
- test_from_pointer_and_integral_constant();
- static_assert(test_from_pointer_and_integral_constant());
+ test_from_pointer_and_constant();
+ static_assert(test_from_pointer_and_constant());
test_from_extents();
static_assert(test_from_extents());
diff --git a/libstdc++-v3/testsuite/23_containers/span/deduction.cc
b/libstdc++-v3/testsuite/23_containers/span/deduction.cc
index c66db90222e..0d045505bed 100644
--- a/libstdc++-v3/testsuite/23_containers/span/deduction.cc
+++ b/libstdc++-v3/testsuite/23_containers/span/deduction.cc
@@ -83,4 +83,14 @@ test01()
std::span s13(a.data(), std::integral_constant<size_t, 3>{});
static_assert( is_static_span<long, 3>(s13));
+
+#if __glibcxx_constant_wrapper
+ auto c5 = std::constant_wrapper<5>{};
+
+ std::span s14(a.data(), std::cw<4>);
+ static_assert( is_static_span<long, 4>(s14));
+
+ std::span s15(a.data(), c5);
+ static_assert( is_static_span<long, 5>(s15));
+#endif
}
--
2.51.0