13
13
// explicit extents(Integrals...) -> see below;
14
14
// Constraints: (is_convertible_v<Integrals, size_t> && ...) is true.
15
15
//
16
- // Remarks: The deduced type is dextents<size_t, sizeof...(Integrals)>.
16
+ // Remarks: The deduced type is dextents<size_t, sizeof...(Integrals)>. // until C++26
17
+ // Remarks: The deduced type is extents<size_t, maybe-static-ext<Integrals>...>. // since C++26
17
18
18
19
#include < mdspan>
19
20
#include < cassert>
21
+ #include < type_traits>
20
22
21
23
#include " ../ConvertibleToIntegral.h"
22
24
#include " test_macros.h"
@@ -43,6 +45,15 @@ constexpr bool test() {
43
45
test (std::extents (1 , 2u , 3 , 4 , 5 , 6 , 7 , 8 , 9 ),
44
46
std::extents<std::size_t , D, D, D, D, D, D, D, D, D>(1 , 2u , 3 , 4 , 5 , 6 , 7 , 8 , 9 ));
45
47
test (std::extents (NoDefaultCtorIndex{1 }, NoDefaultCtorIndex{2 }), std::extents<std::size_t , D, D>(1 , 2 ));
48
+
49
+ #if _LIBCPP_STD_VER >= 26
50
+ // P3029R1: deduction from `integral_constant`
51
+ test (std::extents (std::integral_constant<size_t , 5 >{}), std::extents<std::size_t , 5 >());
52
+ test (std::extents (std::integral_constant<size_t , 5 >{}, 6 ), std::extents<std::size_t , 5 , std::dynamic_extent>(6 ));
53
+ test (std::extents (std::integral_constant<size_t , 5 >{}, 6 , std::integral_constant<size_t , 7 >{}),
54
+ std::extents<std::size_t , 5 , std::dynamic_extent, 7 >(6 ));
55
+ #endif
56
+
46
57
return true ;
47
58
}
48
59
0 commit comments