diff --git a/libcxx/test/std/containers/views/views.span/enable_borrowed_range.compile.pass.cpp b/libcxx/test/std/containers/views/views.span/enable_borrowed_range.compile.pass.cpp index 6468d66ab34eb..3b86f6e22b247 100644 --- a/libcxx/test/std/containers/views/views.span/enable_borrowed_range.compile.pass.cpp +++ b/libcxx/test/std/containers/views/views.span/enable_borrowed_range.compile.pass.cpp @@ -6,22 +6,21 @@ // //===----------------------------------------------------------------------===// -// UNSUPPORTED: c++03, c++11, c++14, c++17 +// REQUIRES: std-at-least-c++20 // // template -// inline constexpr bool ranges::enable_borrowed_range< -// span> = true; +// constexpr bool ranges::enable_borrowed_range> = true; #include #include "test_macros.h" void test() { - static_assert(std::ranges::enable_borrowed_range >); - static_assert(std::ranges::enable_borrowed_range >); - static_assert(std::ranges::enable_borrowed_range >); + static_assert(std::ranges::enable_borrowed_range>); + static_assert(std::ranges::enable_borrowed_range>); + static_assert(std::ranges::enable_borrowed_range>); static_assert(!std::ranges::enable_borrowed_range&>); static_assert(!std::ranges::enable_borrowed_range const>); } diff --git a/libcxx/test/std/containers/views/views.span/range_concept_conformance.compile.pass.cpp b/libcxx/test/std/containers/views/views.span/range_concept_conformance.compile.pass.cpp index 52f0a76dfd2ce..cb2e7ce95ed52 100644 --- a/libcxx/test/std/containers/views/views.span/range_concept_conformance.compile.pass.cpp +++ b/libcxx/test/std/containers/views/views.span/range_concept_conformance.compile.pass.cpp @@ -6,9 +6,9 @@ // //===----------------------------------------------------------------------===// -// UNSUPPORTED: c++03, c++11, c++14, c++17 +// REQUIRES: std-at-least-c++20 -// span +// #include diff --git a/libcxx/test/std/containers/views/views.span/span.cons/array.pass.cpp b/libcxx/test/std/containers/views/views.span/span.cons/array.pass.cpp index 6e40aef8521ea..8ed7bdfdcbe6a 100644 --- a/libcxx/test/std/containers/views/views.span/span.cons/array.pass.cpp +++ b/libcxx/test/std/containers/views/views.span/span.cons/array.pass.cpp @@ -5,17 +5,16 @@ // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// -// UNSUPPORTED: c++03, c++11, c++14, c++17 + +// REQUIRES: std-at-least-c++20 // -// template -// constexpr span(element_type (&arr)[N]) noexcept; +// template constexpr span(type_identity_t (&arr)[N]) noexcept; // -// Remarks: These constructors shall not participate in overload resolution unless: +// Constraints: Let U be remove_pointer_t. // - extent == dynamic_extent || N == extent is true, and -// - remove_pointer_t(*)[] is convertible to ElementType(*)[]. -// +// - is_convertible_v is true. #include #include @@ -30,40 +29,40 @@ void checkCV() { volatile int varr[] = {7, 8, 9}; const volatile int cvarr[] = {1, 3, 5}; - // Types the same (dynamic sized) + // Types the same (dynamic sized) { - std::span< int> s1{arr}; // a span< int> pointing at int. - std::span s2{carr}; // a span pointing at const int. - std::span< volatile int> s3{varr}; // a span< volatile int> pointing at volatile int. + std::span s1{arr}; // a span pointing at int. + std::span s2{carr}; // a span pointing at const int. + std::span s3{varr}; // a span pointing at volatile int. std::span s4{cvarr}; // a span pointing at const volatile int. assert(s1.size() + s2.size() + s3.size() + s4.size() == 12); } - // Types the same (static sized) + // Types the same (static sized) { - std::span< int, 3> s1{arr}; // a span< int> pointing at int. - std::span s2{carr}; // a span pointing at const int. - std::span< volatile int, 3> s3{varr}; // a span< volatile int> pointing at volatile int. + std::span s1{arr}; // a span pointing at int. + std::span s2{carr}; // a span pointing at const int. + std::span s3{varr}; // a span pointing at volatile int. std::span s4{cvarr}; // a span pointing at const volatile int. assert(s1.size() + s2.size() + s3.size() + s4.size() == 12); } - // types different (dynamic sized) + // types different (dynamic sized) { - std::span s1{arr}; // a span pointing at int. - std::span< volatile int> s2{arr}; // a span< volatile int> pointing at int. - std::span< volatile int> s3{arr}; // a span< volatile int> pointing at const int. + std::span s1{arr}; // a span pointing at int. + std::span s2{arr}; // a span pointing at int. + std::span s3{arr}; // a span pointing at const int. std::span s4{arr}; // a span pointing at int. std::span s5{carr}; // a span pointing at const int. std::span s6{varr}; // a span pointing at volatile int. assert(s1.size() + s2.size() + s3.size() + s4.size() + s5.size() + s6.size() == 18); } - // types different (static sized) + // types different (static sized) { - std::span s1{arr}; // a span pointing at int. - std::span< volatile int, 3> s2{arr}; // a span< volatile int> pointing at int. - std::span< volatile int, 3> s3{arr}; // a span< volatile int> pointing at const int. + std::span s1{arr}; // a span pointing at int. + std::span s2{arr}; // a span pointing at int. + std::span s3{arr}; // a span pointing at const int. std::span s4{arr}; // a span pointing at int. std::span s5{carr}; // a span pointing at const int. std::span s6{varr}; // a span pointing at volatile int. @@ -116,39 +115,39 @@ int main(int, char**) { // Size wrong { - static_assert(!std::is_constructible, int(&)[3]>::value, ""); + static_assert(!std::is_constructible_v, int (&)[3]>); } // Type wrong { - static_assert(!std::is_constructible, int(&)[3]>::value, ""); - static_assert(!std::is_constructible, int(&)[3]>::value, ""); + static_assert(!std::is_constructible_v, int (&)[3]>); + static_assert(!std::is_constructible_v, int (&)[3]>); } // CV wrong (dynamically sized) { - static_assert(!std::is_constructible, const int(&)[3]>::value, ""); - static_assert(!std::is_constructible, volatile int(&)[3]>::value, ""); - static_assert(!std::is_constructible, const volatile int(&)[3]>::value, ""); + static_assert(!std::is_constructible_v, const int (&)[3]>); + static_assert(!std::is_constructible_v, volatile int (&)[3]>); + static_assert(!std::is_constructible_v, const volatile int (&)[3]>); - static_assert(!std::is_constructible, volatile int(&)[3]>::value, ""); - static_assert(!std::is_constructible, const volatile int(&)[3]>::value, ""); + static_assert(!std::is_constructible_v, volatile int (&)[3]>); + static_assert(!std::is_constructible_v, const volatile int (&)[3]>); - static_assert(!std::is_constructible, const int(&)[3]>::value, ""); - static_assert(!std::is_constructible, const volatile int(&)[3]>::value, ""); + static_assert(!std::is_constructible_v, const int (&)[3]>); + static_assert(!std::is_constructible_v, const volatile int (&)[3]>); } // CV wrong (statically sized) { - static_assert(!std::is_constructible, const int(&)[3]>::value, ""); - static_assert(!std::is_constructible, volatile int(&)[3]>::value, ""); - static_assert(!std::is_constructible, const volatile int(&)[3]>::value, ""); + static_assert(!std::is_constructible_v, const int (&)[3]>); + static_assert(!std::is_constructible_v, volatile int (&)[3]>); + static_assert(!std::is_constructible_v, const volatile int (&)[3]>); - static_assert(!std::is_constructible, volatile int(&)[3]>::value, ""); - static_assert(!std::is_constructible, const volatile int(&)[3]>::value, ""); + static_assert(!std::is_constructible_v, volatile int (&)[3]>); + static_assert(!std::is_constructible_v, const volatile int (&)[3]>); - static_assert(!std::is_constructible, const int(&)[3]>::value, ""); - static_assert(!std::is_constructible, const volatile int(&)[3]>::value, ""); + static_assert(!std::is_constructible_v, const int (&)[3]>); + static_assert(!std::is_constructible_v, const volatile int (&)[3]>); } return 0; diff --git a/libcxx/test/std/containers/views/views.span/span.cons/assign.pass.cpp b/libcxx/test/std/containers/views/views.span/span.cons/assign.pass.cpp index dcbf0fb36d858..b9e8d99a5683c 100644 --- a/libcxx/test/std/containers/views/views.span/span.cons/assign.pass.cpp +++ b/libcxx/test/std/containers/views/views.span/span.cons/assign.pass.cpp @@ -5,11 +5,12 @@ // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// -// UNSUPPORTED: c++03, c++11, c++14, c++17 + +// REQUIRES: std-at-least-c++20 // -// constexpr span& operator=(const span& other) noexcept = default; +// constexpr span& operator=(const span& other) noexcept = default; #include #include @@ -26,8 +27,6 @@ constexpr bool doAssign(T lhs, T rhs) { return lhs.data() == rhs.data() && lhs.size() == rhs.size(); } -struct A {}; - constexpr int carr1[] = {1, 2, 3, 4}; constexpr int carr2[] = {3, 4, 5}; constexpr int carr3[] = {7, 8}; @@ -63,118 +62,118 @@ int main(int, char**) { {carr3, 1U}, {carr3, 2U}}; - static_assert(std::size(spans) == 13, ""); + static_assert(std::size(spans) == 13); // No for loops in constexpr land :-( - static_assert(doAssign(spans[0], spans[0]), ""); - static_assert(doAssign(spans[0], spans[1]), ""); - static_assert(doAssign(spans[0], spans[2]), ""); - static_assert(doAssign(spans[0], spans[3]), ""); - static_assert(doAssign(spans[0], spans[4]), ""); - static_assert(doAssign(spans[0], spans[5]), ""); - static_assert(doAssign(spans[0], spans[6]), ""); - static_assert(doAssign(spans[0], spans[7]), ""); - static_assert(doAssign(spans[0], spans[8]), ""); - static_assert(doAssign(spans[0], spans[9]), ""); - static_assert(doAssign(spans[0], spans[10]), ""); - static_assert(doAssign(spans[0], spans[11]), ""); - static_assert(doAssign(spans[0], spans[12]), ""); - - static_assert(doAssign(spans[1], spans[1]), ""); - static_assert(doAssign(spans[1], spans[2]), ""); - static_assert(doAssign(spans[1], spans[3]), ""); - static_assert(doAssign(spans[1], spans[4]), ""); - static_assert(doAssign(spans[1], spans[5]), ""); - static_assert(doAssign(spans[1], spans[6]), ""); - static_assert(doAssign(spans[1], spans[7]), ""); - static_assert(doAssign(spans[1], spans[8]), ""); - static_assert(doAssign(spans[1], spans[9]), ""); - static_assert(doAssign(spans[1], spans[10]), ""); - static_assert(doAssign(spans[1], spans[11]), ""); - static_assert(doAssign(spans[1], spans[12]), ""); - - static_assert(doAssign(spans[2], spans[2]), ""); - static_assert(doAssign(spans[2], spans[3]), ""); - static_assert(doAssign(spans[2], spans[4]), ""); - static_assert(doAssign(spans[2], spans[5]), ""); - static_assert(doAssign(spans[2], spans[6]), ""); - static_assert(doAssign(spans[2], spans[7]), ""); - static_assert(doAssign(spans[2], spans[8]), ""); - static_assert(doAssign(spans[2], spans[9]), ""); - static_assert(doAssign(spans[2], spans[10]), ""); - static_assert(doAssign(spans[2], spans[11]), ""); - static_assert(doAssign(spans[2], spans[12]), ""); - - static_assert(doAssign(spans[3], spans[3]), ""); - static_assert(doAssign(spans[3], spans[4]), ""); - static_assert(doAssign(spans[3], spans[4]), ""); - static_assert(doAssign(spans[3], spans[4]), ""); - static_assert(doAssign(spans[3], spans[4]), ""); - static_assert(doAssign(spans[3], spans[4]), ""); - static_assert(doAssign(spans[3], spans[4]), ""); - static_assert(doAssign(spans[3], spans[4]), ""); - static_assert(doAssign(spans[3], spans[4]), ""); - static_assert(doAssign(spans[3], spans[10]), ""); - static_assert(doAssign(spans[3], spans[11]), ""); - static_assert(doAssign(spans[3], spans[12]), ""); - - static_assert(doAssign(spans[4], spans[4]), ""); - static_assert(doAssign(spans[4], spans[5]), ""); - static_assert(doAssign(spans[4], spans[6]), ""); - static_assert(doAssign(spans[4], spans[7]), ""); - static_assert(doAssign(spans[4], spans[8]), ""); - static_assert(doAssign(spans[4], spans[9]), ""); - static_assert(doAssign(spans[4], spans[10]), ""); - static_assert(doAssign(spans[4], spans[11]), ""); - static_assert(doAssign(spans[4], spans[12]), ""); - - static_assert(doAssign(spans[5], spans[5]), ""); - static_assert(doAssign(spans[5], spans[6]), ""); - static_assert(doAssign(spans[5], spans[7]), ""); - static_assert(doAssign(spans[5], spans[8]), ""); - static_assert(doAssign(spans[5], spans[9]), ""); - static_assert(doAssign(spans[5], spans[10]), ""); - static_assert(doAssign(spans[5], spans[11]), ""); - static_assert(doAssign(spans[5], spans[12]), ""); - - static_assert(doAssign(spans[6], spans[6]), ""); - static_assert(doAssign(spans[6], spans[7]), ""); - static_assert(doAssign(spans[6], spans[8]), ""); - static_assert(doAssign(spans[6], spans[9]), ""); - static_assert(doAssign(spans[6], spans[10]), ""); - static_assert(doAssign(spans[6], spans[11]), ""); - static_assert(doAssign(spans[6], spans[12]), ""); - - static_assert(doAssign(spans[7], spans[7]), ""); - static_assert(doAssign(spans[7], spans[8]), ""); - static_assert(doAssign(spans[7], spans[9]), ""); - static_assert(doAssign(spans[7], spans[10]), ""); - static_assert(doAssign(spans[7], spans[11]), ""); - static_assert(doAssign(spans[7], spans[12]), ""); - - static_assert(doAssign(spans[8], spans[8]), ""); - static_assert(doAssign(spans[8], spans[9]), ""); - static_assert(doAssign(spans[8], spans[10]), ""); - static_assert(doAssign(spans[8], spans[11]), ""); - static_assert(doAssign(spans[8], spans[12]), ""); - - static_assert(doAssign(spans[9], spans[9]), ""); - static_assert(doAssign(spans[9], spans[10]), ""); - static_assert(doAssign(spans[9], spans[11]), ""); - static_assert(doAssign(spans[9], spans[12]), ""); - - static_assert(doAssign(spans[10], spans[10]), ""); - static_assert(doAssign(spans[10], spans[11]), ""); - static_assert(doAssign(spans[10], spans[12]), ""); - - static_assert(doAssign(spans[11], spans[11]), ""); - static_assert(doAssign(spans[11], spans[12]), ""); - - static_assert(doAssign(spans[12], spans[12]), ""); + static_assert(doAssign(spans[0], spans[0])); + static_assert(doAssign(spans[0], spans[1])); + static_assert(doAssign(spans[0], spans[2])); + static_assert(doAssign(spans[0], spans[3])); + static_assert(doAssign(spans[0], spans[4])); + static_assert(doAssign(spans[0], spans[5])); + static_assert(doAssign(spans[0], spans[6])); + static_assert(doAssign(spans[0], spans[7])); + static_assert(doAssign(spans[0], spans[8])); + static_assert(doAssign(spans[0], spans[9])); + static_assert(doAssign(spans[0], spans[10])); + static_assert(doAssign(spans[0], spans[11])); + static_assert(doAssign(spans[0], spans[12])); + + static_assert(doAssign(spans[1], spans[1])); + static_assert(doAssign(spans[1], spans[2])); + static_assert(doAssign(spans[1], spans[3])); + static_assert(doAssign(spans[1], spans[4])); + static_assert(doAssign(spans[1], spans[5])); + static_assert(doAssign(spans[1], spans[6])); + static_assert(doAssign(spans[1], spans[7])); + static_assert(doAssign(spans[1], spans[8])); + static_assert(doAssign(spans[1], spans[9])); + static_assert(doAssign(spans[1], spans[10])); + static_assert(doAssign(spans[1], spans[11])); + static_assert(doAssign(spans[1], spans[12])); + + static_assert(doAssign(spans[2], spans[2])); + static_assert(doAssign(spans[2], spans[3])); + static_assert(doAssign(spans[2], spans[4])); + static_assert(doAssign(spans[2], spans[5])); + static_assert(doAssign(spans[2], spans[6])); + static_assert(doAssign(spans[2], spans[7])); + static_assert(doAssign(spans[2], spans[8])); + static_assert(doAssign(spans[2], spans[9])); + static_assert(doAssign(spans[2], spans[10])); + static_assert(doAssign(spans[2], spans[11])); + static_assert(doAssign(spans[2], spans[12])); + + static_assert(doAssign(spans[3], spans[3])); + static_assert(doAssign(spans[3], spans[4])); + static_assert(doAssign(spans[3], spans[4])); + static_assert(doAssign(spans[3], spans[4])); + static_assert(doAssign(spans[3], spans[4])); + static_assert(doAssign(spans[3], spans[4])); + static_assert(doAssign(spans[3], spans[4])); + static_assert(doAssign(spans[3], spans[4])); + static_assert(doAssign(spans[3], spans[4])); + static_assert(doAssign(spans[3], spans[10])); + static_assert(doAssign(spans[3], spans[11])); + static_assert(doAssign(spans[3], spans[12])); + + static_assert(doAssign(spans[4], spans[4])); + static_assert(doAssign(spans[4], spans[5])); + static_assert(doAssign(spans[4], spans[6])); + static_assert(doAssign(spans[4], spans[7])); + static_assert(doAssign(spans[4], spans[8])); + static_assert(doAssign(spans[4], spans[9])); + static_assert(doAssign(spans[4], spans[10])); + static_assert(doAssign(spans[4], spans[11])); + static_assert(doAssign(spans[4], spans[12])); + + static_assert(doAssign(spans[5], spans[5])); + static_assert(doAssign(spans[5], spans[6])); + static_assert(doAssign(spans[5], spans[7])); + static_assert(doAssign(spans[5], spans[8])); + static_assert(doAssign(spans[5], spans[9])); + static_assert(doAssign(spans[5], spans[10])); + static_assert(doAssign(spans[5], spans[11])); + static_assert(doAssign(spans[5], spans[12])); + + static_assert(doAssign(spans[6], spans[6])); + static_assert(doAssign(spans[6], spans[7])); + static_assert(doAssign(spans[6], spans[8])); + static_assert(doAssign(spans[6], spans[9])); + static_assert(doAssign(spans[6], spans[10])); + static_assert(doAssign(spans[6], spans[11])); + static_assert(doAssign(spans[6], spans[12])); + + static_assert(doAssign(spans[7], spans[7])); + static_assert(doAssign(spans[7], spans[8])); + static_assert(doAssign(spans[7], spans[9])); + static_assert(doAssign(spans[7], spans[10])); + static_assert(doAssign(spans[7], spans[11])); + static_assert(doAssign(spans[7], spans[12])); + + static_assert(doAssign(spans[8], spans[8])); + static_assert(doAssign(spans[8], spans[9])); + static_assert(doAssign(spans[8], spans[10])); + static_assert(doAssign(spans[8], spans[11])); + static_assert(doAssign(spans[8], spans[12])); + + static_assert(doAssign(spans[9], spans[9])); + static_assert(doAssign(spans[9], spans[10])); + static_assert(doAssign(spans[9], spans[11])); + static_assert(doAssign(spans[9], spans[12])); + + static_assert(doAssign(spans[10], spans[10])); + static_assert(doAssign(spans[10], spans[11])); + static_assert(doAssign(spans[10], spans[12])); + + static_assert(doAssign(spans[11], spans[11])); + static_assert(doAssign(spans[11], spans[12])); + + static_assert(doAssign(spans[12], spans[12])); // for (size_t i = 0; i < std::size(spans); ++i) // for (size_t j = i; j < std::size(spans); ++j) - // static_assert(doAssign(spans[i], spans[j]), ""); + // static_assert(doAssign(spans[i], spans[j])); } // constexpr statically sized assignment @@ -188,39 +187,39 @@ int main(int, char**) { spanType{carr2 + 1, 2}, spanType{carr3, 2}}; - static_assert(std::size(spans) == 6, ""); + static_assert(std::size(spans) == 6); // No for loops in constexpr land :-( - static_assert(doAssign(spans[0], spans[0]), ""); - static_assert(doAssign(spans[0], spans[1]), ""); - static_assert(doAssign(spans[0], spans[2]), ""); - static_assert(doAssign(spans[0], spans[3]), ""); - static_assert(doAssign(spans[0], spans[4]), ""); - static_assert(doAssign(spans[0], spans[5]), ""); + static_assert(doAssign(spans[0], spans[0])); + static_assert(doAssign(spans[0], spans[1])); + static_assert(doAssign(spans[0], spans[2])); + static_assert(doAssign(spans[0], spans[3])); + static_assert(doAssign(spans[0], spans[4])); + static_assert(doAssign(spans[0], spans[5])); - static_assert(doAssign(spans[1], spans[1]), ""); - static_assert(doAssign(spans[1], spans[2]), ""); - static_assert(doAssign(spans[1], spans[3]), ""); - static_assert(doAssign(spans[1], spans[4]), ""); - static_assert(doAssign(spans[1], spans[5]), ""); + static_assert(doAssign(spans[1], spans[1])); + static_assert(doAssign(spans[1], spans[2])); + static_assert(doAssign(spans[1], spans[3])); + static_assert(doAssign(spans[1], spans[4])); + static_assert(doAssign(spans[1], spans[5])); - static_assert(doAssign(spans[2], spans[2]), ""); - static_assert(doAssign(spans[2], spans[3]), ""); - static_assert(doAssign(spans[2], spans[4]), ""); - static_assert(doAssign(spans[2], spans[5]), ""); + static_assert(doAssign(spans[2], spans[2])); + static_assert(doAssign(spans[2], spans[3])); + static_assert(doAssign(spans[2], spans[4])); + static_assert(doAssign(spans[2], spans[5])); - static_assert(doAssign(spans[3], spans[3]), ""); - static_assert(doAssign(spans[3], spans[4]), ""); - static_assert(doAssign(spans[3], spans[5]), ""); + static_assert(doAssign(spans[3], spans[3])); + static_assert(doAssign(spans[3], spans[4])); + static_assert(doAssign(spans[3], spans[5])); - static_assert(doAssign(spans[4], spans[4]), ""); - static_assert(doAssign(spans[4], spans[5]), ""); + static_assert(doAssign(spans[4], spans[4])); + static_assert(doAssign(spans[4], spans[5])); - static_assert(doAssign(spans[5], spans[5]), ""); + static_assert(doAssign(spans[5], spans[5])); // for (size_t i = 0; i < std::size(spans); ++i) // for (size_t j = i; j < std::size(spans); ++j) - // static_assert(doAssign(spans[i], spans[j]), ""); + // static_assert(doAssign(spans[i], spans[j])); } // dynamically sized assignment diff --git a/libcxx/test/std/containers/views/views.span/span.cons/copy.pass.cpp b/libcxx/test/std/containers/views/views.span/span.cons/copy.pass.cpp index aa284c58171fb..c72076d0c62b7 100644 --- a/libcxx/test/std/containers/views/views.span/span.cons/copy.pass.cpp +++ b/libcxx/test/std/containers/views/views.span/span.cons/copy.pass.cpp @@ -6,11 +6,11 @@ // //===----------------------------------------------------------------------===// -// UNSUPPORTED: c++03, c++11, c++14, c++17 +// REQUIRES: std-at-least-c++20 // -// constexpr span(const span& other) noexcept = default; +// constexpr span(const span& other) noexcept = default; #include #include diff --git a/libcxx/test/std/containers/views/views.span/span.cons/deduct.pass.cpp b/libcxx/test/std/containers/views/views.span/span.cons/deduct.pass.cpp index e32e787ac3381..9e41afad2258e 100644 --- a/libcxx/test/std/containers/views/views.span/span.cons/deduct.pass.cpp +++ b/libcxx/test/std/containers/views/views.span/span.cons/deduct.pass.cpp @@ -5,24 +5,24 @@ // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// -// UNSUPPORTED: c++03, c++11, c++14, c++17 + +// REQUIRES: std-at-least-c++20 // -// template -// span(It, EndOrSize) -> span>>; -// -// template -// span(T (&)[N]) -> span; -// -// template -// span(array&) -> span; -// -// template -// span(const array&) -> span; -// -// template -// span(R&&) -> span>>; +// template +// span(It, EndOrSize) -> span>>; // until C++26 +// template +// span(It, EndOrSize) -> span>, +// maybe-static-ext>; // since C++26 +// template +// span(T (&)[N]) -> span; +// template +// span(array&) -> span; +// template +// span(const array&) -> span; +// template +// span(R&&) -> span>>; #include #include diff --git a/libcxx/test/std/containers/views/views.span/span.cons/default.pass.cpp b/libcxx/test/std/containers/views/views.span/span.cons/default.pass.cpp index 02fc48e145b77..d041169623e77 100644 --- a/libcxx/test/std/containers/views/views.span/span.cons/default.pass.cpp +++ b/libcxx/test/std/containers/views/views.span/span.cons/default.pass.cpp @@ -5,7 +5,8 @@ // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// -// UNSUPPORTED: c++03, c++11, c++14, c++17 + +// REQUIRES: std-at-least-c++20 // @@ -57,10 +58,10 @@ void testRuntimeSpan() { struct A {}; int main(int, char**) { - static_assert(testConstexprSpan(), ""); - static_assert(testConstexprSpan(), ""); - static_assert(testConstexprSpan(), ""); - static_assert(testConstexprSpan(), ""); + static_assert(testConstexprSpan()); + static_assert(testConstexprSpan()); + static_assert(testConstexprSpan()); + static_assert(testConstexprSpan()); testRuntimeSpan(); testRuntimeSpan(); @@ -70,9 +71,9 @@ int main(int, char**) { checkCV(); - static_assert(std::is_default_constructible_v>, ""); - static_assert(std::is_default_constructible_v>, ""); - static_assert(!std::is_default_constructible_v>, ""); + static_assert(std::is_default_constructible_v>); + static_assert(std::is_default_constructible_v>); + static_assert(!std::is_default_constructible_v>); return 0; } diff --git a/libcxx/test/std/containers/views/views.span/span.cons/initializer_list.pass.cpp b/libcxx/test/std/containers/views/views.span/span.cons/initializer_list.pass.cpp index a19d33f0816ba..0bd5fcd2c21bf 100644 --- a/libcxx/test/std/containers/views/views.span/span.cons/initializer_list.pass.cpp +++ b/libcxx/test/std/containers/views/views.span/span.cons/initializer_list.pass.cpp @@ -6,7 +6,7 @@ // //===----------------------------------------------------------------------===// -// UNSUPPORTED: c++03, c++11, c++14, c++17 +// REQUIRES: std-at-least-c++20 // @@ -15,7 +15,6 @@ #include #include -#include "test_convertible.h" #include "test_macros.h" struct Sink { diff --git a/libcxx/test/std/containers/views/views.span/span.cons/iterator_len.pass.cpp b/libcxx/test/std/containers/views/views.span/span.cons/iterator_len.pass.cpp index 3d95733e9d6c5..c7b0d74bec056 100644 --- a/libcxx/test/std/containers/views/views.span/span.cons/iterator_len.pass.cpp +++ b/libcxx/test/std/containers/views/views.span/span.cons/iterator_len.pass.cpp @@ -5,14 +5,16 @@ // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===---------------------------------------------------------------------===// -// UNSUPPORTED: c++03, c++11, c++14, c++17 + +// REQUIRES: std-at-least-c++20 // -// template -// constexpr explicit(Extent != dynamic_extent) span(It first, size_type count); -// If Extent is not equal to dynamic_extent, then count shall be equal to Extent. +// template +// constexpr explicit(extent != dynamic_extent) span(It first, size_type count); // +// Hardened preconditions: +// - If extent is not equal to dynamic_extent, then count == extent is true. #include #include diff --git a/libcxx/test/std/containers/views/views.span/span.cons/iterator_len.verify.cpp b/libcxx/test/std/containers/views/views.span/span.cons/iterator_len.verify.cpp index 0122d65e46612..7a03e918cea0e 100644 --- a/libcxx/test/std/containers/views/views.span/span.cons/iterator_len.verify.cpp +++ b/libcxx/test/std/containers/views/views.span/span.cons/iterator_len.verify.cpp @@ -5,13 +5,23 @@ // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===---------------------------------------------------------------------===// -// UNSUPPORTED: c++03, c++11, c++14, c++17 + +// REQUIRES: std-at-least-c++20 // -// template -// constexpr explicit(Extent != dynamic_extent) span(It first, size_type count); -// If Extent is not equal to dynamic_extent, then count shall be equal to Extent. +// template +// constexpr explicit(extent != dynamic_extent) span(It first, size_type count); +// +// Constraints: Let U be remove_reference_t>. +// - It satisfies contiguous_iterator. +// - is_convertible_v is true. +// +// Preconditions: +// - [first, first + count) is a valid range. +// +// Hardened preconditions: +// - If extent is not equal to dynamic_extent, then count == extent is true. #include #include diff --git a/libcxx/test/std/containers/views/views.span/span.cons/iterator_sentinel.pass.cpp b/libcxx/test/std/containers/views/views.span/span.cons/iterator_sentinel.pass.cpp index e893b5ae62874..84cf535bd840d 100644 --- a/libcxx/test/std/containers/views/views.span/span.cons/iterator_sentinel.pass.cpp +++ b/libcxx/test/std/containers/views/views.span/span.cons/iterator_sentinel.pass.cpp @@ -5,20 +5,26 @@ // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===---------------------------------------------------------------------===// -// UNSUPPORTED: c++03, c++11, c++14, c++17 + +// REQUIRES: std-at-least-c++20 // -// template -// constexpr explicit(Extent != dynamic_extent) span(It first, End last); -// Requires: [first, last) shall be a valid range. -// If Extent is not equal to dynamic_extent, then last - first shall be equal to Extent. -// Throws: When and what last - first throws. +// template +// constexpr explicit(extent != dynamic_extent) span(It first, End last); +// +// Preconditions: +// - [first, last) is a valid range. +// +// Hardened preconditions: +// - If extent is not equal to dynamic_extent, then (last - first) == extent is true. +// +// Throws: +// - When and what last - first throws. #include #include #include -#include #include "assert_macros.h" #include "test_iterators.h" @@ -66,12 +72,12 @@ class throw_operator_minus { It it_; public: - typedef std::contiguous_iterator_tag iterator_category; - typedef typename std::iterator_traits::value_type value_type; - typedef typename std::iterator_traits::difference_type difference_type; - typedef It pointer; - typedef typename std::iterator_traits::reference reference; - typedef std::remove_reference_t element_type; + using iterator_category = std::contiguous_iterator_tag; + using value_type = std::iterator_traits::value_type; + using difference_type = std::iterator_traits::difference_type; + using pointer = It; + using reference = std::iterator_traits::reference; + using element_type = std::remove_reference_t; throw_operator_minus() : it_() {} explicit throw_operator_minus(It it) : it_(it) {} diff --git a/libcxx/test/std/containers/views/views.span/span.cons/iterator_sentinel.verify.cpp b/libcxx/test/std/containers/views/views.span/span.cons/iterator_sentinel.verify.cpp index b97c1a51572cb..2a7933d18e081 100644 --- a/libcxx/test/std/containers/views/views.span/span.cons/iterator_sentinel.verify.cpp +++ b/libcxx/test/std/containers/views/views.span/span.cons/iterator_sentinel.verify.cpp @@ -5,15 +5,19 @@ // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===---------------------------------------------------------------------===// -// UNSUPPORTED: c++03, c++11, c++14, c++17 + +// REQUIRES: std-at-least-c++20 // -// template -// constexpr explicit(Extent != dynamic_extent) span(It first, End last); -// Requires: [first, last) shall be a valid range. -// If Extent is not equal to dynamic_extent, then last - first shall be equal to Extent. +// template +// constexpr explicit(extent != dynamic_extent) span(It first, End last); +// +// Preconditions: +// - [first, last) is a valid range. // +// Hardened preconditions: +// If extent is not equal to dynamic_extent, then (last - first) == extent is true. #include #include diff --git a/libcxx/test/std/containers/views/views.span/span.cons/range.pass.cpp b/libcxx/test/std/containers/views/views.span/span.cons/range.pass.cpp index e9f8d26ee747a..4f9dfca51d41b 100644 --- a/libcxx/test/std/containers/views/views.span/span.cons/range.pass.cpp +++ b/libcxx/test/std/containers/views/views.span/span.cons/range.pass.cpp @@ -5,12 +5,13 @@ // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===---------------------------------------------------------------------===// -// UNSUPPORTED: c++03, c++11, c++14, c++17 + +// REQUIRES: std-at-least-c++20 // -// template -// constexpr explicit(Extent != dynamic_extent) span(R&& r); +// template +// constexpr explicit(Extent != dynamic_extent) span(R&& r); #include #include diff --git a/libcxx/test/std/containers/views/views.span/span.cons/span.dtor.compile.pass.cpp b/libcxx/test/std/containers/views/views.span/span.cons/span.dtor.compile.pass.cpp index f87aee11eacd9..816ddf01983a4 100644 --- a/libcxx/test/std/containers/views/views.span/span.cons/span.dtor.compile.pass.cpp +++ b/libcxx/test/std/containers/views/views.span/span.cons/span.dtor.compile.pass.cpp @@ -5,7 +5,8 @@ // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// -// UNSUPPORTED: c++03, c++11, c++14, c++17 + +// REQUIRES: std-at-least-c++20 // diff --git a/libcxx/test/std/containers/views/views.span/span.cons/span.pass.cpp b/libcxx/test/std/containers/views/views.span/span.cons/span.pass.cpp index a1ac0dd11b2d1..8b9776736dd5c 100644 --- a/libcxx/test/std/containers/views/views.span/span.cons/span.pass.cpp +++ b/libcxx/test/std/containers/views/views.span/span.cons/span.pass.cpp @@ -5,16 +5,17 @@ // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// -// UNSUPPORTED: c++03, c++11, c++14, c++17 + +// REQUIRES: std-at-least-c++20 // // template -// constexpr span(const span& s) noexcept; +// constexpr explicit(see below) span(const span& s) noexcept; // -// Remarks: This constructor shall not participate in overload resolution unless: -// Extent == dynamic_extent || Extent == OtherExtent is true, and -// OtherElementType(*)[] is convertible to ElementType(*)[]. +// Constraints: +// - extent == dynamic_extent || OtherExtent == dynamic_extent || extent == OtherExtent is true, and +// - is_convertible_v is true. #include #include diff --git a/libcxx/test/std/containers/views/views.span/span.cons/span.verify.cpp b/libcxx/test/std/containers/views/views.span/span.cons/span.verify.cpp index 0b9a88d3dc656..23cceea3c1fdd 100644 --- a/libcxx/test/std/containers/views/views.span/span.cons/span.verify.cpp +++ b/libcxx/test/std/containers/views/views.span/span.cons/span.verify.cpp @@ -5,19 +5,19 @@ // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// -// UNSUPPORTED: c++03, c++11, c++14, c++17 + +// REQUIRES: std-at-least-c++20 // // template -// constexpr span(const span& s) noexcept; +// constexpr explicit(see below) span(const span& s) noexcept; // -// Remarks: This constructor shall not participate in overload resolution unless: -// Extent == dynamic_extent || Extent == OtherExtent is true, and -// OtherElementType(*)[] is convertible to ElementType(*)[]. +// Constraints: +// - extent == dynamic_extent || OtherExtent == dynamic_extent || extent == OtherExtent is true, and +// - is_convertible_v is true. #include -#include #include #include "test_macros.h" @@ -28,38 +28,38 @@ std::span createImplicitSpan(std::span s) { } void checkCV() { - // std::span< int> sp; + // std::span sp; std::span csp; - std::span< volatile int> vsp; + std::span vsp; std::span cvsp; - // std::span< int, 0> sp0; + // std::span sp0; std::span csp0; - std::span< volatile int, 0> vsp0; + std::span vsp0; std::span cvsp0; // Try to remove const and/or volatile (dynamic -> dynamic) { - std::span< int> s1{csp}; // expected-error {{no matching constructor for initialization of 'std::span'}} - std::span< int> s2{vsp}; // expected-error {{no matching constructor for initialization of 'std::span'}} - std::span< int> s3{cvsp}; // expected-error {{no matching constructor for initialization of 'std::span'}} + std::span s1{csp}; // expected-error {{no matching constructor for initialization of 'std::span'}} + std::span s2{vsp}; // expected-error {{no matching constructor for initialization of 'std::span'}} + std::span s3{cvsp}; // expected-error {{no matching constructor for initialization of 'std::span'}} std::span s4{vsp}; // expected-error@-1 {{no matching constructor for initialization of 'std::span'}} std::span s5{cvsp}; // expected-error@-1 {{no matching constructor for initialization of 'std::span'}} - std::span< volatile int> s6{csp}; + std::span s6{csp}; // expected-error@-1 {{no matching constructor for initialization of 'std::span'}} - std::span< volatile int> s7{cvsp}; + std::span s7{cvsp}; // expected-error@-1 {{no matching constructor for initialization of 'std::span'}} } // Try to remove const and/or volatile (static -> static) { - std::span< int, 0> s1{csp0}; // expected-error {{no matching constructor for initialization of 'std::span'}} - std::span< int, 0> s2{vsp0}; // expected-error {{no matching constructor for initialization of 'std::span'}} - std::span< int, 0> s3{cvsp0}; + std::span s1{csp0}; // expected-error {{no matching constructor for initialization of 'std::span'}} + std::span s2{vsp0}; // expected-error {{no matching constructor for initialization of 'std::span'}} + std::span s3{cvsp0}; // expected-error@-1 {{no matching constructor for initialization of 'std::span'}} std::span s4{vsp0}; @@ -67,43 +67,43 @@ void checkCV() { std::span s5{cvsp0}; // expected-error@-1 {{no matching constructor for initialization of 'std::span'}} - std::span< volatile int, 0> s6{csp0}; + std::span s6{csp0}; // expected-error@-1 {{no matching constructor for initialization of 'std::span'}} - std::span< volatile int, 0> s7{cvsp0}; + std::span s7{cvsp0}; // expected-error@-1 {{no matching constructor for initialization of 'std::span'}} } // Try to remove const and/or volatile (static -> dynamic) { - std::span< int> s1{csp0}; // expected-error {{no matching constructor for initialization of 'std::span'}} - std::span< int> s2{vsp0}; // expected-error {{no matching constructor for initialization of 'std::span'}} - std::span< int> s3{cvsp0}; // expected-error {{no matching constructor for initialization of 'std::span'}} + std::span s1{csp0}; // expected-error {{no matching constructor for initialization of 'std::span'}} + std::span s2{vsp0}; // expected-error {{no matching constructor for initialization of 'std::span'}} + std::span s3{cvsp0}; // expected-error {{no matching constructor for initialization of 'std::span'}} std::span s4{vsp0}; // expected-error@-1 {{no matching constructor for initialization of 'std::span'}} std::span s5{cvsp0}; // expected-error@-1 {{no matching constructor for initialization of 'std::span'}} - std::span< volatile int> s6{csp0}; + std::span s6{csp0}; // expected-error@-1 {{no matching constructor for initialization of 'std::span'}} - std::span< volatile int> s7{cvsp0}; + std::span s7{cvsp0}; // expected-error@-1 {{no matching constructor for initialization of 'std::span'}} } // Try to remove const and/or volatile (static -> static) { - std::span< int, 0> s1{csp}; // expected-error {{no matching constructor for initialization of 'std::span'}} - std::span< int, 0> s2{vsp}; // expected-error {{no matching constructor for initialization of 'std::span'}} - std::span< int, 0> s3{cvsp}; // expected-error {{no matching constructor for initialization of 'std::span'}} + std::span s1{csp}; // expected-error {{no matching constructor for initialization of 'std::span'}} + std::span s2{vsp}; // expected-error {{no matching constructor for initialization of 'std::span'}} + std::span s3{cvsp}; // expected-error {{no matching constructor for initialization of 'std::span'}} std::span s4{vsp}; // expected-error@-1 {{no matching constructor for initialization of 'std::span'}} std::span s5{cvsp}; // expected-error@-1 {{no matching constructor for initialization of 'std::span'}} - std::span< volatile int, 0> s6{csp}; + std::span s6{csp}; // expected-error@-1 {{no matching constructor for initialization of 'std::span'}} - std::span< volatile int, 0> s7{cvsp}; + std::span s7{cvsp}; // expected-error@-1 {{no matching constructor for initialization of 'std::span'}} } } diff --git a/libcxx/test/std/containers/views/views.span/span.cons/stdarray.pass.cpp b/libcxx/test/std/containers/views/views.span/span.cons/stdarray.pass.cpp index 1c261f4f38f74..839a557382c4e 100644 --- a/libcxx/test/std/containers/views/views.span/span.cons/stdarray.pass.cpp +++ b/libcxx/test/std/containers/views/views.span/span.cons/stdarray.pass.cpp @@ -5,24 +5,21 @@ // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// -// UNSUPPORTED: c++03, c++11, c++14, c++17 + +// REQUIRES: std-at-least-c++20 // -// template -// constexpr span(array& arr) noexcept; -// template -// constexpr span(const array& arr) noexcept; +// template constexpr span(array& arr) noexcept; +// template constexpr span(const array& arr) noexcept; // -// Remarks: These constructors shall not participate in overload resolution unless: +// Constraints: Let U be remove_pointer_t. // - extent == dynamic_extent || N == extent is true, and -// - remove_pointer_t(*)[] is convertible to ElementType(*)[]. -// +// - is_convertible_v is true. #include #include #include -#include #include "test_macros.h" @@ -35,27 +32,27 @@ void checkCV() { // Types the same (dynamic sized) { - std::span< int> s1{arr}; // a span< int> pointing at int. + std::span s1{arr}; // a span pointing at int. } // Types the same (static sized) { - std::span< int, 3> s1{arr}; // a span< int> pointing at int. + std::span s1{arr}; // a span pointing at int. } // types different (dynamic sized) { - std::span s1{arr}; // a span pointing at int. - std::span< volatile int> s2{arr}; // a span< volatile int> pointing at int. - std::span< volatile int> s3{arr}; // a span< volatile int> pointing at const int. + std::span s1{arr}; // a span pointing at int. + std::span s2{arr}; // a span pointing at int. + std::span s3{arr}; // a span pointing at const int. std::span s4{arr}; // a span pointing at int. } // types different (static sized) { - std::span s1{arr}; // a span pointing at int. - std::span< volatile int, 3> s2{arr}; // a span< volatile int> pointing at int. - std::span< volatile int, 3> s3{arr}; // a span< volatile int> pointing at const int. + std::span s1{arr}; // a span pointing at int. + std::span s2{arr}; // a span pointing at int. + std::span s3{arr}; // a span pointing at const int. std::span s4{arr}; // a span pointing at int. } } @@ -82,12 +79,12 @@ constexpr bool testConstructorConstArray() { template constexpr bool testConstructors() { - static_assert(testConstructorArray(), ""); - static_assert(testConstructorArray(), ""); - static_assert(testConstructorArray(), ""); - static_assert(testConstructorConstArray(), ""); - static_assert(testConstructorConstArray(), ""); - static_assert(testConstructorConstArray(), ""); + static_assert(testConstructorArray()); + static_assert(testConstructorArray()); + static_assert(testConstructorArray()); + static_assert(testConstructorConstArray()); + static_assert(testConstructorConstArray()); + static_assert(testConstructorConstArray()); return testConstructorArray() && testConstructorArray() && testConstructorArray() && testConstructorConstArray() && diff --git a/libcxx/test/std/containers/views/views.span/span.elem/at.pass.cpp b/libcxx/test/std/containers/views/views.span/span.elem/at.pass.cpp index c09571675c0ff..c7275cb8a68e6 100644 --- a/libcxx/test/std/containers/views/views.span/span.elem/at.pass.cpp +++ b/libcxx/test/std/containers/views/views.span/span.elem/at.pass.cpp @@ -6,7 +6,7 @@ // //===----------------------------------------------------------------------===// -// UNSUPPORTED: c++03, c++11, c++14, c++17, c++20, c++23 +// REQUIRES: std-at-least-c++26 // diff --git a/libcxx/test/std/containers/views/views.span/span.elem/back.pass.cpp b/libcxx/test/std/containers/views/views.span/span.elem/back.pass.cpp index c5086d076798d..b2f7bdc31a909 100644 --- a/libcxx/test/std/containers/views/views.span/span.elem/back.pass.cpp +++ b/libcxx/test/std/containers/views/views.span/span.elem/back.pass.cpp @@ -5,14 +5,21 @@ // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// -// UNSUPPORTED: c++03, c++11, c++14, c++17 + +// REQUIRES: std-at-least-c++20 // -// constexpr reference back() const noexcept; -// Expects: empty() is false. -// Effects: Equivalent to: return *(data() + (size() - 1)); +// constexpr reference back() const; +// +// Hardened preconditions: +// - empty() is false. // +// Returns: +// - *(data() + (size() - 1)). +// +// Throws: +// - Nothing. #include #include @@ -38,20 +45,19 @@ void testEmptySpan(Span sp) { auto res = sp.back(); } -struct A {}; constexpr int iArr1[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; int iArr2[] = {10, 11, 12, 13, 14, 15, 16, 17, 18, 19}; int main(int, char**) { - static_assert(testConstexprSpan(std::span(iArr1, 1)), ""); - static_assert(testConstexprSpan(std::span(iArr1, 2)), ""); - static_assert(testConstexprSpan(std::span(iArr1, 3)), ""); - static_assert(testConstexprSpan(std::span(iArr1, 4)), ""); - - static_assert(testConstexprSpan(std::span(iArr1, 1)), ""); - static_assert(testConstexprSpan(std::span(iArr1, 2)), ""); - static_assert(testConstexprSpan(std::span(iArr1, 3)), ""); - static_assert(testConstexprSpan(std::span(iArr1, 4)), ""); + static_assert(testConstexprSpan(std::span(iArr1, 1))); + static_assert(testConstexprSpan(std::span(iArr1, 2))); + static_assert(testConstexprSpan(std::span(iArr1, 3))); + static_assert(testConstexprSpan(std::span(iArr1, 4))); + + static_assert(testConstexprSpan(std::span(iArr1, 1))); + static_assert(testConstexprSpan(std::span(iArr1, 2))); + static_assert(testConstexprSpan(std::span(iArr1, 3))); + static_assert(testConstexprSpan(std::span(iArr1, 4))); testRuntimeSpan(std::span(iArr2, 1)); testRuntimeSpan(std::span(iArr2, 2)); diff --git a/libcxx/test/std/containers/views/views.span/span.elem/data.pass.cpp b/libcxx/test/std/containers/views/views.span/span.elem/data.pass.cpp index a95b9772615ba..8107020b1069e 100644 --- a/libcxx/test/std/containers/views/views.span/span.elem/data.pass.cpp +++ b/libcxx/test/std/containers/views/views.span/span.elem/data.pass.cpp @@ -5,12 +5,12 @@ // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// -// UNSUPPORTED: c++03, c++11, c++14, c++17 + +// REQUIRES: std-at-least-c++20 // // constexpr pointer data() const noexcept; -// #include #include @@ -36,38 +36,38 @@ int iArr2[] = {10, 11, 12, 13, 14, 15, 16, 17, 18, 19}; int main(int, char**) { // dynamic size - static_assert(testConstexprSpan(std::span(), nullptr), ""); - static_assert(testConstexprSpan(std::span(), nullptr), ""); - static_assert(testConstexprSpan(std::span(), nullptr), ""); - static_assert(testConstexprSpan(std::span(), nullptr), ""); - static_assert(testConstexprSpan(std::span(), nullptr), ""); - - static_assert(testConstexprSpan(std::span(iArr1, 1), iArr1), ""); - static_assert(testConstexprSpan(std::span(iArr1, 2), iArr1), ""); - static_assert(testConstexprSpan(std::span(iArr1, 3), iArr1), ""); - static_assert(testConstexprSpan(std::span(iArr1, 4), iArr1), ""); - - static_assert(testConstexprSpan(std::span(iArr1 + 1, 1), iArr1 + 1), ""); - static_assert(testConstexprSpan(std::span(iArr1 + 2, 2), iArr1 + 2), ""); - static_assert(testConstexprSpan(std::span(iArr1 + 3, 3), iArr1 + 3), ""); - static_assert(testConstexprSpan(std::span(iArr1 + 4, 4), iArr1 + 4), ""); + static_assert(testConstexprSpan(std::span(), nullptr)); + static_assert(testConstexprSpan(std::span(), nullptr)); + static_assert(testConstexprSpan(std::span(), nullptr)); + static_assert(testConstexprSpan(std::span(), nullptr)); + static_assert(testConstexprSpan(std::span(), nullptr)); + + static_assert(testConstexprSpan(std::span(iArr1, 1), iArr1)); + static_assert(testConstexprSpan(std::span(iArr1, 2), iArr1)); + static_assert(testConstexprSpan(std::span(iArr1, 3), iArr1)); + static_assert(testConstexprSpan(std::span(iArr1, 4), iArr1)); + + static_assert(testConstexprSpan(std::span(iArr1 + 1, 1), iArr1 + 1)); + static_assert(testConstexprSpan(std::span(iArr1 + 2, 2), iArr1 + 2)); + static_assert(testConstexprSpan(std::span(iArr1 + 3, 3), iArr1 + 3)); + static_assert(testConstexprSpan(std::span(iArr1 + 4, 4), iArr1 + 4)); // static size - static_assert(testConstexprSpan(std::span(), nullptr), ""); - static_assert(testConstexprSpan(std::span(), nullptr), ""); - static_assert(testConstexprSpan(std::span(), nullptr), ""); - static_assert(testConstexprSpan(std::span(), nullptr), ""); - static_assert(testConstexprSpan(std::span(), nullptr), ""); - - static_assert(testConstexprSpan(std::span(iArr1, 1), iArr1), ""); - static_assert(testConstexprSpan(std::span(iArr1, 2), iArr1), ""); - static_assert(testConstexprSpan(std::span(iArr1, 3), iArr1), ""); - static_assert(testConstexprSpan(std::span(iArr1, 4), iArr1), ""); - - static_assert(testConstexprSpan(std::span(iArr1 + 1, 1), iArr1 + 1), ""); - static_assert(testConstexprSpan(std::span(iArr1 + 2, 2), iArr1 + 2), ""); - static_assert(testConstexprSpan(std::span(iArr1 + 3, 3), iArr1 + 3), ""); - static_assert(testConstexprSpan(std::span(iArr1 + 4, 4), iArr1 + 4), ""); + static_assert(testConstexprSpan(std::span(), nullptr)); + static_assert(testConstexprSpan(std::span(), nullptr)); + static_assert(testConstexprSpan(std::span(), nullptr)); + static_assert(testConstexprSpan(std::span(), nullptr)); + static_assert(testConstexprSpan(std::span(), nullptr)); + + static_assert(testConstexprSpan(std::span(iArr1, 1), iArr1)); + static_assert(testConstexprSpan(std::span(iArr1, 2), iArr1)); + static_assert(testConstexprSpan(std::span(iArr1, 3), iArr1)); + static_assert(testConstexprSpan(std::span(iArr1, 4), iArr1)); + + static_assert(testConstexprSpan(std::span(iArr1 + 1, 1), iArr1 + 1)); + static_assert(testConstexprSpan(std::span(iArr1 + 2, 2), iArr1 + 2)); + static_assert(testConstexprSpan(std::span(iArr1 + 3, 3), iArr1 + 3)); + static_assert(testConstexprSpan(std::span(iArr1 + 4, 4), iArr1 + 4)); // dynamic size testRuntimeSpan(std::span(), nullptr); diff --git a/libcxx/test/std/containers/views/views.span/span.elem/front.pass.cpp b/libcxx/test/std/containers/views/views.span/span.elem/front.pass.cpp index 0a5cb0641df21..1a12af82f0bdb 100644 --- a/libcxx/test/std/containers/views/views.span/span.elem/front.pass.cpp +++ b/libcxx/test/std/containers/views/views.span/span.elem/front.pass.cpp @@ -5,14 +5,21 @@ // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// -// UNSUPPORTED: c++03, c++11, c++14, c++17 + +// REQUIRES: std-at-least-c++20 // -// constexpr reference front() const noexcept; -// Expects: empty() is false. -// Effects: Equivalent to: return *data(); +// constexpr reference front() const; +// +// Hardened preconditions: +// - empty() is false. // +// Returns: +// - *data(). +// +// Throws: +// - Nothing. #include #include @@ -43,15 +50,15 @@ constexpr int iArr1[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; int iArr2[] = {10, 11, 12, 13, 14, 15, 16, 17, 18, 19}; int main(int, char**) { - static_assert(testConstexprSpan(std::span(iArr1, 1)), ""); - static_assert(testConstexprSpan(std::span(iArr1, 2)), ""); - static_assert(testConstexprSpan(std::span(iArr1, 3)), ""); - static_assert(testConstexprSpan(std::span(iArr1, 4)), ""); - - static_assert(testConstexprSpan(std::span(iArr1, 1)), ""); - static_assert(testConstexprSpan(std::span(iArr1, 2)), ""); - static_assert(testConstexprSpan(std::span(iArr1, 3)), ""); - static_assert(testConstexprSpan(std::span(iArr1, 4)), ""); + static_assert(testConstexprSpan(std::span(iArr1, 1))); + static_assert(testConstexprSpan(std::span(iArr1, 2))); + static_assert(testConstexprSpan(std::span(iArr1, 3))); + static_assert(testConstexprSpan(std::span(iArr1, 4))); + + static_assert(testConstexprSpan(std::span(iArr1, 1))); + static_assert(testConstexprSpan(std::span(iArr1, 2))); + static_assert(testConstexprSpan(std::span(iArr1, 3))); + static_assert(testConstexprSpan(std::span(iArr1, 4))); testRuntimeSpan(std::span(iArr2, 1)); testRuntimeSpan(std::span(iArr2, 2)); diff --git a/libcxx/test/std/containers/views/views.span/span.elem/op_idx.pass.cpp b/libcxx/test/std/containers/views/views.span/span.elem/op_idx.pass.cpp index 4ba2896553027..9075ad00abfb4 100644 --- a/libcxx/test/std/containers/views/views.span/span.elem/op_idx.pass.cpp +++ b/libcxx/test/std/containers/views/views.span/span.elem/op_idx.pass.cpp @@ -5,12 +5,20 @@ // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// -// UNSUPPORTED: c++03, c++11, c++14, c++17 + +// REQUIRES: std-at-least-c++20 // // constexpr reference operator[](size_type idx) const; // +// Hardened preconditions: +// - idx < size() is true. +// +// Returns: +// - *(data() + idx). +// Throws: +// - Nothing. #include #include @@ -40,33 +48,33 @@ constexpr int iArr1[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; int iArr2[] = {10, 11, 12, 13, 14, 15, 16, 17, 18, 19}; int main(int, char**) { - static_assert(testConstexprSpan(std::span(iArr1, 1), 0), ""); + static_assert(testConstexprSpan(std::span(iArr1, 1), 0)); - static_assert(testConstexprSpan(std::span(iArr1, 2), 0), ""); - static_assert(testConstexprSpan(std::span(iArr1, 2), 1), ""); + static_assert(testConstexprSpan(std::span(iArr1, 2), 0)); + static_assert(testConstexprSpan(std::span(iArr1, 2), 1)); - static_assert(testConstexprSpan(std::span(iArr1, 3), 0), ""); - static_assert(testConstexprSpan(std::span(iArr1, 3), 1), ""); - static_assert(testConstexprSpan(std::span(iArr1, 3), 2), ""); + static_assert(testConstexprSpan(std::span(iArr1, 3), 0)); + static_assert(testConstexprSpan(std::span(iArr1, 3), 1)); + static_assert(testConstexprSpan(std::span(iArr1, 3), 2)); - static_assert(testConstexprSpan(std::span(iArr1, 4), 0), ""); - static_assert(testConstexprSpan(std::span(iArr1, 4), 1), ""); - static_assert(testConstexprSpan(std::span(iArr1, 4), 2), ""); - static_assert(testConstexprSpan(std::span(iArr1, 4), 3), ""); + static_assert(testConstexprSpan(std::span(iArr1, 4), 0)); + static_assert(testConstexprSpan(std::span(iArr1, 4), 1)); + static_assert(testConstexprSpan(std::span(iArr1, 4), 2)); + static_assert(testConstexprSpan(std::span(iArr1, 4), 3)); - static_assert(testConstexprSpan(std::span(iArr1, 1), 0), ""); + static_assert(testConstexprSpan(std::span(iArr1, 1), 0)); - static_assert(testConstexprSpan(std::span(iArr1, 2), 0), ""); - static_assert(testConstexprSpan(std::span(iArr1, 2), 1), ""); + static_assert(testConstexprSpan(std::span(iArr1, 2), 0)); + static_assert(testConstexprSpan(std::span(iArr1, 2), 1)); - static_assert(testConstexprSpan(std::span(iArr1, 3), 0), ""); - static_assert(testConstexprSpan(std::span(iArr1, 3), 1), ""); - static_assert(testConstexprSpan(std::span(iArr1, 3), 2), ""); + static_assert(testConstexprSpan(std::span(iArr1, 3), 0)); + static_assert(testConstexprSpan(std::span(iArr1, 3), 1)); + static_assert(testConstexprSpan(std::span(iArr1, 3), 2)); - static_assert(testConstexprSpan(std::span(iArr1, 4), 0), ""); - static_assert(testConstexprSpan(std::span(iArr1, 4), 1), ""); - static_assert(testConstexprSpan(std::span(iArr1, 4), 2), ""); - static_assert(testConstexprSpan(std::span(iArr1, 4), 3), ""); + static_assert(testConstexprSpan(std::span(iArr1, 4), 0)); + static_assert(testConstexprSpan(std::span(iArr1, 4), 1)); + static_assert(testConstexprSpan(std::span(iArr1, 4), 2)); + static_assert(testConstexprSpan(std::span(iArr1, 4), 3)); testRuntimeSpan(std::span(iArr2, 1), 0); diff --git a/libcxx/test/std/containers/views/views.span/span.iterators/begin.pass.cpp b/libcxx/test/std/containers/views/views.span/span.iterators/begin.pass.cpp index 4792b756e42dc..7e403a783404c 100644 --- a/libcxx/test/std/containers/views/views.span/span.iterators/begin.pass.cpp +++ b/libcxx/test/std/containers/views/views.span/span.iterators/begin.pass.cpp @@ -5,7 +5,8 @@ // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// -// UNSUPPORTED: c++03, c++11, c++14, c++17 + +// REQUIRES: std-at-least-c++20 // @@ -51,23 +52,23 @@ constexpr int iArr1[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; int iArr2[] = {10, 11, 12, 13, 14, 15, 16, 17, 18, 19}; int main(int, char**) { - static_assert(testConstexprSpan(std::span()), ""); - static_assert(testConstexprSpan(std::span()), ""); - static_assert(testConstexprSpan(std::span()), ""); - static_assert(testConstexprSpan(std::span()), ""); - static_assert(testConstexprSpan(std::span()), ""); - - static_assert(testConstexprSpan(std::span()), ""); - static_assert(testConstexprSpan(std::span()), ""); - static_assert(testConstexprSpan(std::span()), ""); - static_assert(testConstexprSpan(std::span()), ""); - static_assert(testConstexprSpan(std::span()), ""); - - static_assert(testConstexprSpan(std::span(iArr1, 1)), ""); - static_assert(testConstexprSpan(std::span(iArr1, 2)), ""); - static_assert(testConstexprSpan(std::span(iArr1, 3)), ""); - static_assert(testConstexprSpan(std::span(iArr1, 4)), ""); - static_assert(testConstexprSpan(std::span(iArr1, 5)), ""); + static_assert(testConstexprSpan(std::span())); + static_assert(testConstexprSpan(std::span())); + static_assert(testConstexprSpan(std::span())); + static_assert(testConstexprSpan(std::span())); + static_assert(testConstexprSpan(std::span())); + + static_assert(testConstexprSpan(std::span())); + static_assert(testConstexprSpan(std::span())); + static_assert(testConstexprSpan(std::span())); + static_assert(testConstexprSpan(std::span())); + static_assert(testConstexprSpan(std::span())); + + static_assert(testConstexprSpan(std::span(iArr1, 1))); + static_assert(testConstexprSpan(std::span(iArr1, 2))); + static_assert(testConstexprSpan(std::span(iArr1, 3))); + static_assert(testConstexprSpan(std::span(iArr1, 4))); + static_assert(testConstexprSpan(std::span(iArr1, 5))); testRuntimeSpan(std::span()); testRuntimeSpan(std::span()); diff --git a/libcxx/test/std/containers/views/views.span/span.iterators/end.pass.cpp b/libcxx/test/std/containers/views/views.span/span.iterators/end.pass.cpp index 0daa55bf0542c..2eddb4d34c729 100644 --- a/libcxx/test/std/containers/views/views.span/span.iterators/end.pass.cpp +++ b/libcxx/test/std/containers/views/views.span/span.iterators/end.pass.cpp @@ -5,7 +5,8 @@ // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// -// UNSUPPORTED: c++03, c++11, c++14, c++17 + +// REQUIRES: std-at-least-c++20 // @@ -55,23 +56,23 @@ constexpr int iArr1[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; int iArr2[] = {10, 11, 12, 13, 14, 15, 16, 17, 18, 19}; int main(int, char**) { - static_assert(testConstexprSpan(std::span()), ""); - static_assert(testConstexprSpan(std::span()), ""); - static_assert(testConstexprSpan(std::span()), ""); - static_assert(testConstexprSpan(std::span()), ""); - static_assert(testConstexprSpan(std::span()), ""); - - static_assert(testConstexprSpan(std::span()), ""); - static_assert(testConstexprSpan(std::span()), ""); - static_assert(testConstexprSpan(std::span()), ""); - static_assert(testConstexprSpan(std::span()), ""); - static_assert(testConstexprSpan(std::span()), ""); - - static_assert(testConstexprSpan(std::span(iArr1, 1)), ""); - static_assert(testConstexprSpan(std::span(iArr1, 2)), ""); - static_assert(testConstexprSpan(std::span(iArr1, 3)), ""); - static_assert(testConstexprSpan(std::span(iArr1, 4)), ""); - static_assert(testConstexprSpan(std::span(iArr1, 5)), ""); + static_assert(testConstexprSpan(std::span())); + static_assert(testConstexprSpan(std::span())); + static_assert(testConstexprSpan(std::span())); + static_assert(testConstexprSpan(std::span())); + static_assert(testConstexprSpan(std::span())); + + static_assert(testConstexprSpan(std::span())); + static_assert(testConstexprSpan(std::span())); + static_assert(testConstexprSpan(std::span())); + static_assert(testConstexprSpan(std::span())); + static_assert(testConstexprSpan(std::span())); + + static_assert(testConstexprSpan(std::span(iArr1, 1))); + static_assert(testConstexprSpan(std::span(iArr1, 2))); + static_assert(testConstexprSpan(std::span(iArr1, 3))); + static_assert(testConstexprSpan(std::span(iArr1, 4))); + static_assert(testConstexprSpan(std::span(iArr1, 5))); testRuntimeSpan(std::span()); testRuntimeSpan(std::span()); diff --git a/libcxx/test/std/containers/views/views.span/span.iterators/iterator.pass.cpp b/libcxx/test/std/containers/views/views.span/span.iterators/iterator.pass.cpp index 13a7628e6043d..c23136034c9e9 100644 --- a/libcxx/test/std/containers/views/views.span/span.iterators/iterator.pass.cpp +++ b/libcxx/test/std/containers/views/views.span/span.iterators/iterator.pass.cpp @@ -6,7 +6,7 @@ // //===----------------------------------------------------------------------===// -// UNSUPPORTED: c++03, c++11, c++14, c++17 +// REQUIRES: std-at-least-c++20 // @@ -86,7 +86,7 @@ constexpr bool test() { int main(int, char**) { test(); - static_assert(test(), ""); + static_assert(test()); return 0; } diff --git a/libcxx/test/std/containers/views/views.span/span.iterators/iterator_concept_conformance.compile.pass.cpp b/libcxx/test/std/containers/views/views.span/span.iterators/iterator_concept_conformance.compile.pass.cpp index e07be3efb4a36..fcf31e1b64a38 100644 --- a/libcxx/test/std/containers/views/views.span/span.iterators/iterator_concept_conformance.compile.pass.cpp +++ b/libcxx/test/std/containers/views/views.span/span.iterators/iterator_concept_conformance.compile.pass.cpp @@ -6,7 +6,7 @@ // //===----------------------------------------------------------------------===// -// UNSUPPORTED: c++03, c++11, c++14, c++17 +// REQUIRES: std-at-least-c++20 // iterator, reverse_iterator diff --git a/libcxx/test/std/containers/views/views.span/span.iterators/rbegin.pass.cpp b/libcxx/test/std/containers/views/views.span/span.iterators/rbegin.pass.cpp index 1030dec7f6e40..bd01f01e3c6cc 100644 --- a/libcxx/test/std/containers/views/views.span/span.iterators/rbegin.pass.cpp +++ b/libcxx/test/std/containers/views/views.span/span.iterators/rbegin.pass.cpp @@ -5,7 +5,8 @@ // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// -// UNSUPPORTED: c++03, c++11, c++14, c++17 + +// REQUIRES: std-at-least-c++20 // @@ -51,23 +52,23 @@ constexpr int iArr1[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; int iArr2[] = {10, 11, 12, 13, 14, 15, 16, 17, 18, 19}; int main(int, char**) { - static_assert(testConstexprSpan(std::span()), ""); - static_assert(testConstexprSpan(std::span()), ""); - static_assert(testConstexprSpan(std::span()), ""); - static_assert(testConstexprSpan(std::span()), ""); - static_assert(testConstexprSpan(std::span()), ""); - - static_assert(testConstexprSpan(std::span()), ""); - static_assert(testConstexprSpan(std::span()), ""); - static_assert(testConstexprSpan(std::span()), ""); - static_assert(testConstexprSpan(std::span()), ""); - static_assert(testConstexprSpan(std::span()), ""); - - static_assert(testConstexprSpan(std::span(iArr1, 1)), ""); - static_assert(testConstexprSpan(std::span(iArr1, 2)), ""); - static_assert(testConstexprSpan(std::span(iArr1, 3)), ""); - static_assert(testConstexprSpan(std::span(iArr1, 4)), ""); - static_assert(testConstexprSpan(std::span(iArr1, 5)), ""); + static_assert(testConstexprSpan(std::span())); + static_assert(testConstexprSpan(std::span())); + static_assert(testConstexprSpan(std::span())); + static_assert(testConstexprSpan(std::span())); + static_assert(testConstexprSpan(std::span())); + + static_assert(testConstexprSpan(std::span())); + static_assert(testConstexprSpan(std::span())); + static_assert(testConstexprSpan(std::span())); + static_assert(testConstexprSpan(std::span())); + static_assert(testConstexprSpan(std::span())); + + static_assert(testConstexprSpan(std::span(iArr1, 1))); + static_assert(testConstexprSpan(std::span(iArr1, 2))); + static_assert(testConstexprSpan(std::span(iArr1, 3))); + static_assert(testConstexprSpan(std::span(iArr1, 4))); + static_assert(testConstexprSpan(std::span(iArr1, 5))); testRuntimeSpan(std::span()); testRuntimeSpan(std::span()); diff --git a/libcxx/test/std/containers/views/views.span/span.iterators/rend.pass.cpp b/libcxx/test/std/containers/views/views.span/span.iterators/rend.pass.cpp index ca2b781aaf614..13dc5c89dc1ed 100644 --- a/libcxx/test/std/containers/views/views.span/span.iterators/rend.pass.cpp +++ b/libcxx/test/std/containers/views/views.span/span.iterators/rend.pass.cpp @@ -5,7 +5,8 @@ // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// -// UNSUPPORTED: c++03, c++11, c++14, c++17 + +// REQUIRES: std-at-least-c++20 // @@ -51,23 +52,23 @@ constexpr int iArr1[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; int iArr2[] = {10, 11, 12, 13, 14, 15, 16, 17, 18, 19}; int main(int, char**) { - static_assert(testConstexprSpan(std::span()), ""); - static_assert(testConstexprSpan(std::span()), ""); - static_assert(testConstexprSpan(std::span()), ""); - static_assert(testConstexprSpan(std::span()), ""); - static_assert(testConstexprSpan(std::span()), ""); - - static_assert(testConstexprSpan(std::span()), ""); - static_assert(testConstexprSpan(std::span()), ""); - static_assert(testConstexprSpan(std::span()), ""); - static_assert(testConstexprSpan(std::span()), ""); - static_assert(testConstexprSpan(std::span()), ""); - - static_assert(testConstexprSpan(std::span(iArr1, 1)), ""); - static_assert(testConstexprSpan(std::span(iArr1, 2)), ""); - static_assert(testConstexprSpan(std::span(iArr1, 3)), ""); - static_assert(testConstexprSpan(std::span(iArr1, 4)), ""); - static_assert(testConstexprSpan(std::span(iArr1, 5)), ""); + static_assert(testConstexprSpan(std::span())); + static_assert(testConstexprSpan(std::span())); + static_assert(testConstexprSpan(std::span())); + static_assert(testConstexprSpan(std::span())); + static_assert(testConstexprSpan(std::span())); + + static_assert(testConstexprSpan(std::span())); + static_assert(testConstexprSpan(std::span())); + static_assert(testConstexprSpan(std::span())); + static_assert(testConstexprSpan(std::span())); + static_assert(testConstexprSpan(std::span())); + + static_assert(testConstexprSpan(std::span(iArr1, 1))); + static_assert(testConstexprSpan(std::span(iArr1, 2))); + static_assert(testConstexprSpan(std::span(iArr1, 3))); + static_assert(testConstexprSpan(std::span(iArr1, 4))); + static_assert(testConstexprSpan(std::span(iArr1, 5))); testRuntimeSpan(std::span()); testRuntimeSpan(std::span()); diff --git a/libcxx/test/std/containers/views/views.span/span.objectrep/as_bytes.pass.cpp b/libcxx/test/std/containers/views/views.span/span.objectrep/as_bytes.pass.cpp index 89eda480df688..bbbfd0ff022b9 100644 --- a/libcxx/test/std/containers/views/views.span/span.objectrep/as_bytes.pass.cpp +++ b/libcxx/test/std/containers/views/views.span/span.objectrep/as_bytes.pass.cpp @@ -5,7 +5,8 @@ // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// -// UNSUPPORTED: c++03, c++11, c++14, c++17 + +// REQUIRES: std-at-least-c++20 // diff --git a/libcxx/test/std/containers/views/views.span/span.objectrep/as_writable_bytes.pass.cpp b/libcxx/test/std/containers/views/views.span/span.objectrep/as_writable_bytes.pass.cpp index 3ad7cf754049a..c1456c60c62c9 100644 --- a/libcxx/test/std/containers/views/views.span/span.objectrep/as_writable_bytes.pass.cpp +++ b/libcxx/test/std/containers/views/views.span/span.objectrep/as_writable_bytes.pass.cpp @@ -5,7 +5,8 @@ // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// -// UNSUPPORTED: c++03, c++11, c++14, c++17 + +// REQUIRES: std-at-least-c++20 // diff --git a/libcxx/test/std/containers/views/views.span/span.obs/empty.nodiscard.verify.cpp b/libcxx/test/std/containers/views/views.span/span.obs/empty.nodiscard.verify.cpp index 8efc4b4a34404..5a635c978197c 100644 --- a/libcxx/test/std/containers/views/views.span/span.obs/empty.nodiscard.verify.cpp +++ b/libcxx/test/std/containers/views/views.span/span.obs/empty.nodiscard.verify.cpp @@ -5,11 +5,12 @@ // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// -// UNSUPPORTED: c++03, c++11, c++14, c++17 + +// REQUIRES: std-at-least-c++20 // -// [[nodiscard]] constexpr bool empty() const noexcept; +// constexpr bool empty() const noexcept; #include diff --git a/libcxx/test/std/containers/views/views.span/span.obs/empty.pass.cpp b/libcxx/test/std/containers/views/views.span/span.obs/empty.pass.cpp index c7b66884abc8c..1b42f7277146a 100644 --- a/libcxx/test/std/containers/views/views.span/span.obs/empty.pass.cpp +++ b/libcxx/test/std/containers/views/views.span/span.obs/empty.pass.cpp @@ -5,12 +5,15 @@ // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// -// UNSUPPORTED: c++03, c++11, c++14, c++17 + +// REQUIRES: std-at-least-c++20 // -// [[nodiscard]] constexpr bool empty() const noexcept; +// constexpr bool empty() const noexcept; // +// Effects: +// - Equivalent to: return size() == 0; #include #include @@ -23,26 +26,26 @@ constexpr int iArr1[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; int iArr2[] = {10, 11, 12, 13, 14, 15, 16, 17, 18, 19}; int main(int, char**) { - static_assert(noexcept(std::span().empty()), ""); - static_assert(noexcept(std::span().empty()), ""); + static_assert(noexcept(std::span().empty())); + static_assert(noexcept(std::span().empty())); - static_assert(std::span().empty(), ""); - static_assert(std::span().empty(), ""); - static_assert(std::span().empty(), ""); - static_assert(std::span().empty(), ""); - static_assert(std::span().empty(), ""); + static_assert(std::span().empty()); + static_assert(std::span().empty()); + static_assert(std::span().empty()); + static_assert(std::span().empty()); + static_assert(std::span().empty()); - static_assert(std::span().empty(), ""); - static_assert(std::span().empty(), ""); - static_assert(std::span().empty(), ""); - static_assert(std::span().empty(), ""); - static_assert(std::span().empty(), ""); + static_assert(std::span().empty()); + static_assert(std::span().empty()); + static_assert(std::span().empty()); + static_assert(std::span().empty()); + static_assert(std::span().empty()); - static_assert(!std::span(iArr1, 1).empty(), ""); - static_assert(!std::span(iArr1, 2).empty(), ""); - static_assert(!std::span(iArr1, 3).empty(), ""); - static_assert(!std::span(iArr1, 4).empty(), ""); - static_assert(!std::span(iArr1, 5).empty(), ""); + static_assert(!std::span(iArr1, 1).empty()); + static_assert(!std::span(iArr1, 2).empty()); + static_assert(!std::span(iArr1, 3).empty()); + static_assert(!std::span(iArr1, 4).empty()); + static_assert(!std::span(iArr1, 5).empty()); assert((std::span().empty())); assert((std::span().empty())); diff --git a/libcxx/test/std/containers/views/views.span/span.obs/size.pass.cpp b/libcxx/test/std/containers/views/views.span/span.obs/size.pass.cpp index 9dde3d4610b24..8e8d34c0aa1c7 100644 --- a/libcxx/test/std/containers/views/views.span/span.obs/size.pass.cpp +++ b/libcxx/test/std/containers/views/views.span/span.obs/size.pass.cpp @@ -5,12 +5,15 @@ // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// -// UNSUPPORTED: c++03, c++11, c++14, c++17 + +// REQUIRES: std-at-least-c++20 // // constexpr size_type size() const noexcept; // +// Effects: +// - Equivalent to: return size_; #include #include @@ -35,23 +38,23 @@ constexpr int iArr1[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; int iArr2[] = {10, 11, 12, 13, 14, 15, 16, 17, 18, 19}; int main(int, char**) { - static_assert(testConstexprSpan(std::span(), 0), ""); - static_assert(testConstexprSpan(std::span(), 0), ""); - static_assert(testConstexprSpan(std::span(), 0), ""); - static_assert(testConstexprSpan(std::span(), 0), ""); - static_assert(testConstexprSpan(std::span(), 0), ""); - - static_assert(testConstexprSpan(std::span(), 0), ""); - static_assert(testConstexprSpan(std::span(), 0), ""); - static_assert(testConstexprSpan(std::span(), 0), ""); - static_assert(testConstexprSpan(std::span(), 0), ""); - static_assert(testConstexprSpan(std::span(), 0), ""); - - static_assert(testConstexprSpan(std::span(iArr1, 1), 1), ""); - static_assert(testConstexprSpan(std::span(iArr1, 2), 2), ""); - static_assert(testConstexprSpan(std::span(iArr1, 3), 3), ""); - static_assert(testConstexprSpan(std::span(iArr1, 4), 4), ""); - static_assert(testConstexprSpan(std::span(iArr1, 5), 5), ""); + static_assert(testConstexprSpan(std::span(), 0)); + static_assert(testConstexprSpan(std::span(), 0)); + static_assert(testConstexprSpan(std::span(), 0)); + static_assert(testConstexprSpan(std::span(), 0)); + static_assert(testConstexprSpan(std::span(), 0)); + + static_assert(testConstexprSpan(std::span(), 0)); + static_assert(testConstexprSpan(std::span(), 0)); + static_assert(testConstexprSpan(std::span(), 0)); + static_assert(testConstexprSpan(std::span(), 0)); + static_assert(testConstexprSpan(std::span(), 0)); + + static_assert(testConstexprSpan(std::span(iArr1, 1), 1)); + static_assert(testConstexprSpan(std::span(iArr1, 2), 2)); + static_assert(testConstexprSpan(std::span(iArr1, 3), 3)); + static_assert(testConstexprSpan(std::span(iArr1, 4), 4)); + static_assert(testConstexprSpan(std::span(iArr1, 5), 5)); testRuntimeSpan(std::span(), 0); testRuntimeSpan(std::span(), 0); diff --git a/libcxx/test/std/containers/views/views.span/span.obs/size_bytes.pass.cpp b/libcxx/test/std/containers/views/views.span/span.obs/size_bytes.pass.cpp index 3d6e4209315d7..7083256cad400 100644 --- a/libcxx/test/std/containers/views/views.span/span.obs/size_bytes.pass.cpp +++ b/libcxx/test/std/containers/views/views.span/span.obs/size_bytes.pass.cpp @@ -5,13 +5,15 @@ // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// -// UNSUPPORTED: c++03, c++11, c++14, c++17 + +// REQUIRES: std-at-least-c++20 // // constexpr size_type size_bytes() const noexcept; // -// Effects: Equivalent to: return size() * sizeof(element_type); +// Effects: +// - Equivalent to: return size() * sizeof(element_type); #include #include @@ -22,13 +24,13 @@ template constexpr bool testConstexprSpan(Span sp, std::size_t sz) { ASSERT_NOEXCEPT(sp.size_bytes()); - return (std::size_t)sp.size_bytes() == sz * sizeof(typename Span::element_type); + return sp.size_bytes() == sz * sizeof(typename Span::element_type); } template void testRuntimeSpan(Span sp, std::size_t sz) { ASSERT_NOEXCEPT(sp.size_bytes()); - assert((std::size_t)sp.size_bytes() == sz * sizeof(typename Span::element_type)); + assert(sp.size_bytes() == sz * sizeof(typename Span::element_type)); } struct A {}; @@ -36,23 +38,23 @@ constexpr int iArr1[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; int iArr2[] = {10, 11, 12, 13, 14, 15, 16, 17, 18, 19}; int main(int, char**) { - static_assert(testConstexprSpan(std::span(), 0), ""); - static_assert(testConstexprSpan(std::span(), 0), ""); - static_assert(testConstexprSpan(std::span(), 0), ""); - static_assert(testConstexprSpan(std::span(), 0), ""); - static_assert(testConstexprSpan(std::span(), 0), ""); - - static_assert(testConstexprSpan(std::span(), 0), ""); - static_assert(testConstexprSpan(std::span(), 0), ""); - static_assert(testConstexprSpan(std::span(), 0), ""); - static_assert(testConstexprSpan(std::span(), 0), ""); - static_assert(testConstexprSpan(std::span(), 0), ""); - - static_assert(testConstexprSpan(std::span(iArr1, 1), 1), ""); - static_assert(testConstexprSpan(std::span(iArr1, 2), 2), ""); - static_assert(testConstexprSpan(std::span(iArr1, 3), 3), ""); - static_assert(testConstexprSpan(std::span(iArr1, 4), 4), ""); - static_assert(testConstexprSpan(std::span(iArr1, 5), 5), ""); + static_assert(testConstexprSpan(std::span(), 0)); + static_assert(testConstexprSpan(std::span(), 0)); + static_assert(testConstexprSpan(std::span(), 0)); + static_assert(testConstexprSpan(std::span(), 0)); + static_assert(testConstexprSpan(std::span(), 0)); + + static_assert(testConstexprSpan(std::span(), 0)); + static_assert(testConstexprSpan(std::span(), 0)); + static_assert(testConstexprSpan(std::span(), 0)); + static_assert(testConstexprSpan(std::span(), 0)); + static_assert(testConstexprSpan(std::span(), 0)); + + static_assert(testConstexprSpan(std::span(iArr1, 1), 1)); + static_assert(testConstexprSpan(std::span(iArr1, 2), 2)); + static_assert(testConstexprSpan(std::span(iArr1, 3), 3)); + static_assert(testConstexprSpan(std::span(iArr1, 4), 4)); + static_assert(testConstexprSpan(std::span(iArr1, 5), 5)); testRuntimeSpan(std::span(), 0); testRuntimeSpan(std::span(), 0); diff --git a/libcxx/test/std/containers/views/views.span/trivially_copyable.compile.pass.cpp b/libcxx/test/std/containers/views/views.span/trivially_copyable.compile.pass.cpp index bb30bb6aab5ee..b68156154aeb1 100644 --- a/libcxx/test/std/containers/views/views.span/trivially_copyable.compile.pass.cpp +++ b/libcxx/test/std/containers/views/views.span/trivially_copyable.compile.pass.cpp @@ -5,7 +5,7 @@ // //===----------------------------------------------------------------------===// -// UNSUPPORTED: c++03, c++11, c++14, c++17 +// REQUIRES: std-at-least-c++20 // P2251 was voted into C++23, but is supported even in C++20 mode by all vendors. diff --git a/libcxx/test/std/containers/views/views.span/types.pass.cpp b/libcxx/test/std/containers/views/views.span/types.pass.cpp index 14f5de823f353..22e19761122ba 100644 --- a/libcxx/test/std/containers/views/views.span/types.pass.cpp +++ b/libcxx/test/std/containers/views/views.span/types.pass.cpp @@ -5,32 +5,28 @@ // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// -// UNSUPPORTED: c++03, c++11, c++14, c++17 + +// REQUIRES: std-at-least-c++20 // // template // class span { // public: -// // constants and types -// using element_type = ElementType; -// using value_type = remove_cv_t; -// using size_type = size_t; -// using difference_type = ptrdiff_t; -// using pointer = element_type *; -// using reference = element_type &; -// using const_pointer = const element_type *; -// using const_reference = const element_type &; -// using iterator = implementation-defined; -// using const_iterator = implementation-defined; -// using reverse_iterator = std::reverse_iterator; -// using const_reverse_iterator = std::reverse_iterator; -// -// static constexpr size_type extent = Extent; -// +// // constants and types +// using element_type = ElementType; +// using value_type = remove_cv_t; +// using size_type = size_t; +// using difference_type = ptrdiff_t; +// using pointer = element_type*; +// using const_pointer = const element_type*; +// using reference = element_type&; +// using const_reference = const element_type&; +// using iterator = implementation-defined; +// using reverse_iterator = std::reverse_iterator; +// static constexpr size_type extent = Extent; #include -#include #include #include