Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ struct IntType {
constexpr bool operator==(const IntType& rhs) const { return val == rhs.val; }
constexpr operator int() const noexcept { return val; }
constexpr operator unsigned char() const { return val; }
constexpr operator char() const noexcept { return val; }
constexpr operator signed char() const noexcept { return val; }
};

// only non-const convertible
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -89,11 +89,11 @@ constexpr bool test_index_type_combo() {
test<int, int, Test>();
test<int, size_t, Test>();
test<unsigned, int, Test>();
test<char, size_t, Test>();
test<signed char, size_t, Test>();
test<long long, unsigned, Test>();
test<size_t, int, Test>();
test<size_t, size_t, Test>();
test<int, IntType, Test>();
test<char, IntType, Test>();
test<signed char, IntType, Test>();
return true;
}
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ void test() {
int main(int, char**) {
test<int>();
test<unsigned>();
test<char>();
test<signed char>();
test<long long>();
test<size_t>();
return 0;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ void test() {
int main(int, char**) {
test<int>();
test<unsigned>();
test<char>();
test<signed char>();
test<long long>();
test<size_t>();
return 0;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,5 +29,5 @@ void not_extents() {

void representable() {
// expected-error-re@*:* {{static assertion failed {{.*}}layout_left::mapping product of static extents must be representable as index_type.}}
[[maybe_unused]] std::layout_left::mapping<std::extents<char, 20, 20>> mapping;
[[maybe_unused]] std::layout_left::mapping<std::extents<signed char, 20, 20>> mapping;
}
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ constexpr bool test() {
test_iteration<std::extents<unsigned, D>>(7);
test_iteration<std::extents<unsigned, 7>>();
test_iteration<std::extents<unsigned, 7, 8>>();
test_iteration<std::extents<char, D, D, D, D>>(1, 1, 1, 1);
test_iteration<std::extents<signed char, D, D, D, D>>(1, 1, 1, 1);

// Check operator constraint for number of arguments
static_assert(check_operator_constraints(std::layout_left::mapping<std::extents<int, D>>(std::extents<int, D>(1)), 0));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ constexpr void test_layout_mapping_left() {
constexpr bool test() {
constexpr size_t D = std::dynamic_extent;
test_layout_mapping_left<std::extents<int>>();
test_layout_mapping_left<std::extents<char, 4, 5>>();
test_layout_mapping_left<std::extents<signed char, 4, 5>>();
test_layout_mapping_left<std::extents<unsigned, D, 4>>();
test_layout_mapping_left<std::extents<size_t, D, D, D, D>>();
return true;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@ void test_layout_mapping_left() {
int main(int, char**) {
constexpr size_t D = std::dynamic_extent;
test_layout_mapping_left<std::extents<int>>();
test_layout_mapping_left<std::extents<char, 4, 5>>();
test_layout_mapping_left<std::extents<signed char, 4, 5>>();
test_layout_mapping_left<std::extents<unsigned, D, 4>>();
test_layout_mapping_left<std::extents<size_t, D, D, D, D>>();
return 0;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,5 +29,5 @@ void not_extents() {

void representable() {
// expected-error-re@*:* {{static assertion failed {{.*}}layout_right::mapping product of static extents must be representable as index_type.}}
[[maybe_unused]] std::layout_right::mapping<std::extents<char, 20, 20>> mapping;
[[maybe_unused]] std::layout_right::mapping<std::extents<signed char, 20, 20>> mapping;
}
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ constexpr bool test() {
test_iteration<std::extents<unsigned, D>>(7);
test_iteration<std::extents<unsigned, 7>>();
test_iteration<std::extents<unsigned, 7, 8>>();
test_iteration<std::extents<char, D, D, D, D>>(1, 1, 1, 1);
test_iteration<std::extents<signed char, D, D, D, D>>(1, 1, 1, 1);

// Check operator constraint for number of arguments
static_assert(check_operator_constraints(std::layout_right::mapping<std::extents<int, D>>(std::extents<int, D>(1)), 0));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ constexpr void test_layout_mapping_right() {
constexpr bool test() {
constexpr size_t D = std::dynamic_extent;
test_layout_mapping_right<std::extents<int>>();
test_layout_mapping_right<std::extents<char, 4, 5>>();
test_layout_mapping_right<std::extents<signed char, 4, 5>>();
test_layout_mapping_right<std::extents<unsigned, D, 4>>();
test_layout_mapping_right<std::extents<size_t, D, D, D, D>>();
return true;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@ void test_layout_mapping_right() {
int main(int, char**) {
constexpr size_t D = std::dynamic_extent;
test_layout_mapping_right<std::extents<int>>();
test_layout_mapping_right<std::extents<char, 4, 5>>();
test_layout_mapping_right<std::extents<signed char, 4, 5>>();
test_layout_mapping_right<std::extents<unsigned, D, 4>>();
test_layout_mapping_right<std::extents<size_t, D, D, D, D>>();
return 0;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,5 +29,5 @@ void not_extents() {

void representable() {
// expected-error-re@*:* {{static assertion failed {{.*}}layout_stride::mapping product of static extents must be representable as index_type.}}
[[maybe_unused]] std::layout_stride::mapping<std::extents<char, 20, 20>> mapping;
[[maybe_unused]] std::layout_stride::mapping<std::extents<signed char, 20, 20>> mapping;
}
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ constexpr bool test() {
test_iteration<std::extents<unsigned, D>>(std::array<int, 1>{3}, 7);
test_iteration<std::extents<unsigned, 7>>(std::array<int, 1>{4});
test_iteration<std::extents<unsigned, 7, 8>>(std::array<int, 2>{25, 3});
test_iteration<std::extents<char, D, D, D, D>>(std::array<int, 4>{1, 1, 1, 1}, 1, 1, 1, 1);
test_iteration<std::extents<signed char, D, D, D, D>>(std::array<int, 4>{1, 1, 1, 1}, 1, 1, 1, 1);

// Check operator constraint for number of arguments
static_assert(check_operator_constraints(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -102,8 +102,8 @@ test_layout_mapping_stride(E ext, std::array<typename E::index_type, E::rank()>
constexpr bool test() {
constexpr size_t D = std::dynamic_extent;
test_layout_mapping_stride(std::extents<int>(), std::array<int, 0>{}, true);
test_layout_mapping_stride(std::extents<char, 4, 5>(), std::array<char, 2>{1, 4}, true);
test_layout_mapping_stride(std::extents<char, 4, 5>(), std::array<char, 2>{1, 5}, false);
test_layout_mapping_stride(std::extents<signed char, 4, 5>(), std::array<signed char, 2>{1, 4}, true);
test_layout_mapping_stride(std::extents<signed char, 4, 5>(), std::array<signed char, 2>{1, 5}, false);
test_layout_mapping_stride(std::extents<unsigned, D, 4>(7), std::array<unsigned, 2>{20, 2}, false);
test_layout_mapping_stride(std::extents<size_t, D, D, D, D>(3, 3, 3, 3), std::array<size_t, 4>{3, 1, 9, 27}, true);
return true;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@ void test_layout_mapping_stride() {
int main(int, char**) {
constexpr size_t D = std::dynamic_extent;
test_layout_mapping_stride<std::extents<int>>();
test_layout_mapping_stride<std::extents<char, 4, 5>>();
test_layout_mapping_stride<std::extents<signed char, 4, 5>>();
test_layout_mapping_stride<std::extents<unsigned, D, 4>>();
test_layout_mapping_stride<std::extents<size_t, D, D, D, D>>();
return 0;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,10 +57,10 @@ template <class H, class L, class A>
constexpr void mixin_extents(const H& handle, const L& layout, const A& acc) {
constexpr size_t D = std::dynamic_extent;
test_mdspan_types(handle, construct_mapping(layout, std::extents<int>()), acc);
test_mdspan_types(handle, construct_mapping(layout, std::extents<char, D>(7)), acc);
test_mdspan_types(handle, construct_mapping(layout, std::extents<signed char, D>(7)), acc);
test_mdspan_types(handle, construct_mapping(layout, std::extents<unsigned, 7>()), acc);
test_mdspan_types(handle, construct_mapping(layout, std::extents<size_t, D, 4, D>(2, 3)), acc);
test_mdspan_types(handle, construct_mapping(layout, std::extents<char, D, 7, D>(0, 3)), acc);
test_mdspan_types(handle, construct_mapping(layout, std::extents<signed char, D, 7, D>(0, 3)), acc);
test_mdspan_types(handle, construct_mapping(layout, std::extents<int64_t, D, 7, D, 4, D, D>(1, 2, 3, 2)), acc);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,10 +47,10 @@ template <class H, class L, class A>
constexpr void mixin_extents(const H& handle, const L& layout, const A& acc) {
constexpr size_t D = std::dynamic_extent;
test_mdspan_types(handle, construct_mapping(layout, std::extents<int>()), acc);
test_mdspan_types(handle, construct_mapping(layout, std::extents<char, D>(7)), acc);
test_mdspan_types(handle, construct_mapping(layout, std::extents<signed char, D>(7)), acc);
test_mdspan_types(handle, construct_mapping(layout, std::extents<unsigned, 7>()), acc);
test_mdspan_types(handle, construct_mapping(layout, std::extents<size_t, D, 4, D>(2, 3)), acc);
test_mdspan_types(handle, construct_mapping(layout, std::extents<char, D, 7, D>(0, 3)), acc);
test_mdspan_types(handle, construct_mapping(layout, std::extents<signed char, D, 7, D>(0, 3)), acc);
test_mdspan_types(handle, construct_mapping(layout, std::extents<int64_t, D, 7, D, 4, D, D>(1, 2, 3, 2)), acc);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,10 +59,10 @@ template <bool hc, bool mc, bool ac, class H, class L, class A>
constexpr void mixin_extents(const H& handle, const L& layout, const A& acc) {
constexpr size_t D = std::dynamic_extent;
test_mdspan_types<hc, mc, ac>(handle, construct_mapping(layout, std::extents<int>()), acc);
test_mdspan_types<hc, mc, ac>(handle, construct_mapping(layout, std::extents<char, D>(7)), acc);
test_mdspan_types<hc, mc, ac>(handle, construct_mapping(layout, std::extents<signed char, D>(7)), acc);
test_mdspan_types<hc, mc, ac>(handle, construct_mapping(layout, std::extents<unsigned, 7>()), acc);
test_mdspan_types<hc, mc, ac>(handle, construct_mapping(layout, std::extents<size_t, D, 4, D>(2, 3)), acc);
test_mdspan_types<hc, mc, ac>(handle, construct_mapping(layout, std::extents<char, D, 7, D>(0, 3)), acc);
test_mdspan_types<hc, mc, ac>(handle, construct_mapping(layout, std::extents<signed char, D, 7, D>(0, 3)), acc);
test_mdspan_types<hc, mc, ac>(
handle, construct_mapping(layout, std::extents<int64_t, D, 7, D, 4, D, D>(1, 2, 3, 2)), acc);
}
Expand All @@ -74,8 +74,8 @@ constexpr void mixin_layout(const H& handle, const A& acc) {

// Use weird layout, make sure it has the properties we want to test
constexpr size_t D = std::dynamic_extent;
static_assert(
!std::is_default_constructible_v< typename layout_wrapping_integral<4>::template mapping<std::extents<char, D>>>);
static_assert(!std::is_default_constructible_v<
typename layout_wrapping_integral<4>::template mapping<std::extents<signed char, D>>>);
mixin_extents<hc, false, ac>(handle, layout_wrapping_integral<4>(), acc);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -105,10 +105,10 @@ template <bool mec, bool ac, class H, class L, class A>
constexpr void mixin_extents(const H& handle, const L& layout, const A& acc) {
constexpr size_t D = std::dynamic_extent;
test_mdspan_ctor<mec, ac>(handle, construct_mapping(layout, std::extents<int>()), acc);
test_mdspan_ctor<mec, ac>(handle, construct_mapping(layout, std::extents<char, D>(7)), acc);
test_mdspan_ctor<mec, ac>(handle, construct_mapping(layout, std::extents<signed char, D>(7)), acc);
test_mdspan_ctor<mec, ac>(handle, construct_mapping(layout, std::extents<unsigned, 7>()), acc);
test_mdspan_ctor<mec, ac>(handle, construct_mapping(layout, std::extents<size_t, D, 4, D>(2, 3)), acc);
test_mdspan_ctor<mec, ac>(handle, construct_mapping(layout, std::extents<char, D, 7, D>(0, 3)), acc);
test_mdspan_ctor<mec, ac>(handle, construct_mapping(layout, std::extents<signed char, D, 7, D>(0, 3)), acc);
test_mdspan_ctor<mec, ac>(
handle, construct_mapping(layout, std::extents<int64_t, D, 7, D, 4, D, D>(1, 2, 3, 2)), acc);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,10 +68,10 @@ template <bool mec, bool ac, class H, class L, class A>
constexpr void mixin_extents(const H& handle, const L& layout, const A& acc) {
constexpr size_t D = std::dynamic_extent;
test_mdspan_types<mec, ac>(handle, construct_mapping(layout, std::extents<int>()), acc);
test_mdspan_types<mec, ac>(handle, construct_mapping(layout, std::extents<char, D>(7)), acc);
test_mdspan_types<mec, ac>(handle, construct_mapping(layout, std::extents<signed char, D>(7)), acc);
test_mdspan_types<mec, ac>(handle, construct_mapping(layout, std::extents<unsigned, 7>()), acc);
test_mdspan_types<mec, ac>(handle, construct_mapping(layout, std::extents<size_t, D, 4, D>(2, 3)), acc);
test_mdspan_types<mec, ac>(handle, construct_mapping(layout, std::extents<char, D, 7, D>(0, 3)), acc);
test_mdspan_types<mec, ac>(handle, construct_mapping(layout, std::extents<signed char, D, 7, D>(0, 3)), acc);
test_mdspan_types<mec, ac>(
handle, construct_mapping(layout, std::extents<int64_t, D, 7, D, 4, D, D>(1, 2, 3, 2)), acc);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -84,17 +84,17 @@ constexpr void mixin_extents(const H& handle, const L& layout, const A& acc) {
constexpr size_t D = std::dynamic_extent;
// construct from just dynamic extents
test_mdspan_types<mec, ac>(handle, construct_mapping(layout, std::extents<int>()), acc);
test_mdspan_types<mec, ac>(handle, construct_mapping(layout, std::extents<char, D>(7)), acc, 7);
test_mdspan_types<mec, ac>(handle, construct_mapping(layout, std::extents<signed char, D>(7)), acc, 7);
test_mdspan_types<mec, ac>(handle, construct_mapping(layout, std::extents<unsigned, 7>()), acc);
test_mdspan_types<mec, ac>(handle, construct_mapping(layout, std::extents<size_t, D, 4, D>(2, 3)), acc, 2, 3);
test_mdspan_types<mec, ac>(handle, construct_mapping(layout, std::extents<char, D, 7, D>(0, 3)), acc, 0, 3);
test_mdspan_types<mec, ac>(handle, construct_mapping(layout, std::extents<signed char, D, 7, D>(0, 3)), acc, 0, 3);
test_mdspan_types<mec, ac>(
handle, construct_mapping(layout, std::extents<int64_t, D, 7, D, 4, D, D>(1, 2, 3, 2)), acc, 1, 2, 3, 2);

// construct from all extents
test_mdspan_types<mec, ac>(handle, construct_mapping(layout, std::extents<unsigned, 7>()), acc, 7);
test_mdspan_types<mec, ac>(handle, construct_mapping(layout, std::extents<size_t, D, 4, D>(2, 3)), acc, 2, 4, 3);
test_mdspan_types<mec, ac>(handle, construct_mapping(layout, std::extents<char, D, 7, D>(0, 3)), acc, 0, 7, 3);
test_mdspan_types<mec, ac>(handle, construct_mapping(layout, std::extents<signed char, D, 7, D>(0, 3)), acc, 0, 7, 3);
test_mdspan_types<mec, ac>(
handle, construct_mapping(layout, std::extents<int64_t, D, 7, D, 4, D, D>(1, 2, 3, 2)), acc, 1, 7, 2, 4, 3, 2);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,10 +65,10 @@ template <bool ac, class H, class L, class A>
constexpr void mixin_extents(const H& handle, const L& layout, const A& acc) {
constexpr size_t D = std::dynamic_extent;
test_mdspan_types<ac>(handle, construct_mapping(layout, std::extents<int>()), acc);
test_mdspan_types<ac>(handle, construct_mapping(layout, std::extents<char, D>(7)), acc);
test_mdspan_types<ac>(handle, construct_mapping(layout, std::extents<signed char, D>(7)), acc);
test_mdspan_types<ac>(handle, construct_mapping(layout, std::extents<unsigned, 7>()), acc);
test_mdspan_types<ac>(handle, construct_mapping(layout, std::extents<size_t, D, 4, D>(2, 3)), acc);
test_mdspan_types<ac>(handle, construct_mapping(layout, std::extents<char, D, 7, D>(0, 3)), acc);
test_mdspan_types<ac>(handle, construct_mapping(layout, std::extents<signed char, D, 7, D>(0, 3)), acc);
test_mdspan_types<ac>(handle, construct_mapping(layout, std::extents<int64_t, D, 7, D, 4, D, D>(1, 2, 3, 2)), acc);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,10 +57,10 @@ template <class H, class L, class A>
constexpr void mixin_extents(const H& handle, const L& layout, const A& acc) {
constexpr size_t D = std::dynamic_extent;
test_mdspan_types(handle, construct_mapping(layout, std::extents<int>()), acc);
test_mdspan_types(handle, construct_mapping(layout, std::extents<char, D>(7)), acc);
test_mdspan_types(handle, construct_mapping(layout, std::extents<signed char, D>(7)), acc);
test_mdspan_types(handle, construct_mapping(layout, std::extents<unsigned, 7>()), acc);
test_mdspan_types(handle, construct_mapping(layout, std::extents<size_t, D, 4, D>(2, 3)), acc);
test_mdspan_types(handle, construct_mapping(layout, std::extents<char, D, 7, D>(0, 3)), acc);
test_mdspan_types(handle, construct_mapping(layout, std::extents<signed char, D, 7, D>(0, 3)), acc);
test_mdspan_types(handle, construct_mapping(layout, std::extents<int64_t, D, 7, D, 4, D, D>(1, 2, 3, 2)), acc);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -105,10 +105,10 @@ template <bool mec, bool ac, class H, class L, class A>
constexpr void mixin_extents(const H& handle, const L& layout, const A& acc) {
constexpr size_t D = std::dynamic_extent;
test_mdspan_ctor<mec, ac>(handle, construct_mapping(layout, std::extents<int>()), acc);
test_mdspan_ctor<mec, ac>(handle, construct_mapping(layout, std::extents<char, D>(7)), acc);
test_mdspan_ctor<mec, ac>(handle, construct_mapping(layout, std::extents<signed char, D>(7)), acc);
test_mdspan_ctor<mec, ac>(handle, construct_mapping(layout, std::extents<unsigned, 7>()), acc);
test_mdspan_ctor<mec, ac>(handle, construct_mapping(layout, std::extents<size_t, D, 4, D>(2, 3)), acc);
test_mdspan_ctor<mec, ac>(handle, construct_mapping(layout, std::extents<char, D, 7, D>(0, 3)), acc);
test_mdspan_ctor<mec, ac>(handle, construct_mapping(layout, std::extents<signed char, D, 7, D>(0, 3)), acc);
test_mdspan_ctor<mec, ac>(
handle, construct_mapping(layout, std::extents<int64_t, D, 7, D, 4, D, D>(1, 2, 3, 2)), acc);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,10 +46,10 @@ template <class H, class L, class A>
constexpr void mixin_extents(const H& handle, const L& layout, const A& acc) {
constexpr size_t D = std::dynamic_extent;
test_mdspan_types(handle, construct_mapping(layout, std::extents<int>()), acc);
test_mdspan_types(handle, construct_mapping(layout, std::extents<char, D>(7)), acc);
test_mdspan_types(handle, construct_mapping(layout, std::extents<signed char, D>(7)), acc);
test_mdspan_types(handle, construct_mapping(layout, std::extents<unsigned, 7>()), acc);
test_mdspan_types(handle, construct_mapping(layout, std::extents<size_t, D, 4, D>(2, 3)), acc);
test_mdspan_types(handle, construct_mapping(layout, std::extents<char, D, 7, D>(0, 3)), acc);
test_mdspan_types(handle, construct_mapping(layout, std::extents<signed char, D, 7, D>(0, 3)), acc);
test_mdspan_types(handle, construct_mapping(layout, std::extents<int64_t, D, 7, D, 4, D, D>(1, 2, 3, 2)), acc);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,10 +80,10 @@ template <class H, class L, class A>
constexpr void mixin_extents(const H& handle, const L& layout, const A& acc) {
constexpr size_t D = std::dynamic_extent;
test_mdspan_types(handle, construct_mapping(layout, std::extents<int>()), acc);
test_mdspan_types(handle, construct_mapping(layout, std::extents<char, D>(7)), acc);
test_mdspan_types(handle, construct_mapping(layout, std::extents<signed char, D>(7)), acc);
test_mdspan_types(handle, construct_mapping(layout, std::extents<unsigned, 7>()), acc);
test_mdspan_types(handle, construct_mapping(layout, std::extents<size_t, D, 4, D>(2, 3)), acc);
test_mdspan_types(handle, construct_mapping(layout, std::extents<char, D, 7, D>(0, 3)), acc);
test_mdspan_types(handle, construct_mapping(layout, std::extents<signed char, D, 7, D>(0, 3)), acc);
test_mdspan_types(handle, construct_mapping(layout, std::extents<int64_t, D, 7, D, 4, D, D>(1, 2, 3, 2)), acc);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ constexpr void test_layout() {
test_iteration(construct_mapping(Layout(), std::extents<unsigned, D>(7)));
test_iteration(construct_mapping(Layout(), std::extents<unsigned, 7>()));
test_iteration(construct_mapping(Layout(), std::extents<unsigned, 7, 8>()));
test_iteration(construct_mapping(Layout(), std::extents<char, D, D, D, D>(1, 1, 1, 1)));
test_iteration(construct_mapping(Layout(), std::extents<signed char, D, D, D, D>(1, 1, 1, 1)));

// TODO enable for GCC 13, when the CI pipeline is switched, doesn't work with GCC 12
#if defined(__clang_major__) && __clang_major__ >= 17
Expand Down
Loading