[libcxx-commits] [libcxx] [libc++][span][test] Various cleanups for <span> tests (PR #202319)

via libcxx-commits libcxx-commits at lists.llvm.org
Mon Jun 8 05:52:31 PDT 2026


https://github.com/eiytoq updated https://github.com/llvm/llvm-project/pull/202319

>From e06321eb21e027ca424ffe382081c05847736d9e Mon Sep 17 00:00:00 2001
From: eiytoq <eiytoq at outlook.com>
Date: Fri, 5 Jun 2026 19:36:54 +0800
Subject: [PATCH 1/3] test

---
 .../enable_borrowed_range.compile.pass.cpp    |  11 +-
 ...range_concept_conformance.compile.pass.cpp |   4 +-
 .../views/views.span/span.cons/array.pass.cpp |  79 +++--
 .../views.span/span.cons/assign.pass.cpp      | 269 +++++++++---------
 .../views/views.span/span.cons/copy.pass.cpp  |   6 +-
 .../views.span/span.cons/deduct.pass.cpp      |  32 +--
 .../views.span/span.cons/default.pass.cpp     |  19 +-
 .../span.cons/initializer_list.pass.cpp       |   5 +-
 .../span.cons/iterator_len.pass.cpp           |  12 +-
 .../span.cons/iterator_len.verify.cpp         |  18 +-
 .../span.cons/iterator_sentinel.pass.cpp      |  34 ++-
 .../span.cons/iterator_sentinel.verify.cpp    |  14 +-
 .../views/views.span/span.cons/range.pass.cpp |   9 +-
 .../span.cons/span.dtor.compile.pass.cpp      |   3 +-
 .../views/views.span/span.cons/span.pass.cpp  |  13 +-
 .../views.span/span.cons/span.verify.cpp      |  62 ++--
 .../views.span/span.cons/stdarray.pass.cpp    |  47 ++-
 .../views/views.span/span.elem/at.pass.cpp    |   2 +-
 .../views/views.span/span.elem/back.pass.cpp  |  34 ++-
 .../views/views.span/span.elem/data.pass.cpp  |  66 ++---
 .../views/views.span/span.elem/front.pass.cpp |  33 ++-
 .../views.span/span.elem/op_idx.pass.cpp      |  50 ++--
 .../views.span/span.iterators/begin.pass.cpp  |  39 +--
 .../views.span/span.iterators/end.pass.cpp    |  39 +--
 .../span.iterators/iterator.pass.cpp          |   6 +-
 ...rator_concept_conformance.compile.pass.cpp |   2 +-
 .../views.span/span.iterators/rbegin.pass.cpp |  39 +--
 .../views.span/span.iterators/rend.pass.cpp   |  39 +--
 .../span.objectrep/as_bytes.pass.cpp          |   5 +-
 .../span.objectrep/as_writable_bytes.pass.cpp |   5 +-
 .../span.obs/empty.nodiscard.verify.cpp       |   5 +-
 .../views/views.span/span.obs/empty.pass.cpp  |  43 +--
 .../views/views.span/span.obs/size.pass.cpp   |  41 +--
 .../views.span/span.obs/size_bytes.pass.cpp   |  46 +--
 .../trivially_copyable.compile.pass.cpp       |   2 +-
 .../views/views.span/types.pass.cpp           |  36 ++-
 36 files changed, 611 insertions(+), 558 deletions(-)

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
 
 // <span>
 
 // template<class ElementType, size_t Extent>
-// inline constexpr bool ranges::enable_borrowed_range<
-//     span<ElementType, Extent>> = true;
+//   constexpr bool ranges::enable_borrowed_range<span<ElementType, Extent>> = true;
 
 #include <span>
 
 #include "test_macros.h"
 
 void test() {
-  static_assert(std::ranges::enable_borrowed_range<std::span<int, 0> >);
-  static_assert(std::ranges::enable_borrowed_range<std::span<int, 42> >);
-  static_assert(std::ranges::enable_borrowed_range<std::span<int, std::dynamic_extent> >);
+  static_assert(std::ranges::enable_borrowed_range<std::span<int, 0>>);
+  static_assert(std::ranges::enable_borrowed_range<std::span<int, 42>>);
+  static_assert(std::ranges::enable_borrowed_range<std::span<int, std::dynamic_extent>>);
   static_assert(!std::ranges::enable_borrowed_range<std::span<int, 42>&>);
   static_assert(!std::ranges::enable_borrowed_range<std::span<int, 42> 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
+// <span>
 
 #include <span>
 
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..cbc51f476c543 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
 
 // <span>
 
-// template<size_t N>
-//     constexpr span(element_type (&arr)[N]) noexcept;
+// template<size_t N> constexpr span(type_identity_t<element_type> (&arr)[N]) noexcept;
 //
-// Remarks: These constructors shall not participate in overload resolution unless:
+// Constraints: Let U be remove_pointer_t<decltype(std::data(arr))>.
 //   - extent == dynamic_extent || N == extent is true, and
-//   - remove_pointer_t<decltype(data(arr))>(*)[] is convertible to ElementType(*)[].
-//
+//   - is_convertible_v<U(*)[], element_type(*)[]> is true.
 
 #include <cassert>
 #include <span>
@@ -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<const int> s2{carr};           // a span<const          int> pointing at const int.
-    std::span< volatile int> s3{varr};       // a span<      volatile int> pointing at volatile int.
+    std::span<int> s1{arr};                  // a span<int> pointing at int.
+    std::span<const int> s2{carr};           // a span<const int> pointing at const int.
+    std::span<volatile int> s3{varr};        // a span<volatile int> pointing at volatile int.
     std::span<const volatile int> s4{cvarr}; // a span<const volatile int> 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<const int, 3> s2{carr};           // a span<const          int> pointing at const int.
-    std::span< volatile int, 3> s3{varr};       // a span<      volatile int> pointing at volatile int.
+    std::span<int, 3> s1{arr};                  // a span<int> pointing at int.
+    std::span<const int, 3> s2{carr};           // a span<const int> pointing at const int.
+    std::span<volatile int, 3> s3{varr};        // a span<volatile int> pointing at volatile int.
     std::span<const volatile int, 3> s4{cvarr}; // a span<const volatile int> 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<const int> s1{arr};           // a span<const          int> 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<const int> s1{arr};           // a span<const int> 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<const volatile int> s4{arr};  // a span<const volatile int> pointing at int.
     std::span<const volatile int> s5{carr}; // a span<const volatile int> pointing at const int.
     std::span<const volatile int> s6{varr}; // a span<const volatile int> 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<const int, 3> s1{arr};           // a span<const          int> 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<const int, 3> s1{arr};           // a span<const int> 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<const volatile int, 3> s4{arr};  // a span<const volatile int> pointing at int.
     std::span<const volatile int, 3> s5{carr}; // a span<const volatile int> pointing at const int.
     std::span<const volatile int, 3> s6{varr}; // a span<const volatile int> pointing at volatile int.
@@ -102,7 +101,7 @@ constexpr bool testSpan() {
 
 struct A {};
 
-int main(int, char**) {
+int main() {
   testSpan<int>();
   testSpan<double>();
   testSpan<A>();
@@ -116,39 +115,39 @@ int main(int, char**) {
 
   // Size wrong
   {
-    static_assert(!std::is_constructible<std::span<int, 2>, int(&)[3]>::value, "");
+    static_assert(!std::is_constructible_v<std::span<int, 2>, int(&)[3]>);
   }
 
   // Type wrong
   {
-    static_assert(!std::is_constructible<std::span<float>, int(&)[3]>::value, "");
-    static_assert(!std::is_constructible<std::span<float, 3>, int(&)[3]>::value, "");
+    static_assert(!std::is_constructible_v<std::span<float>, int(&)[3]>);
+    static_assert(!std::is_constructible_v<std::span<float, 3>, int(&)[3]>);
   }
 
   // CV wrong (dynamically sized)
   {
-    static_assert(!std::is_constructible<std::span<int>, const int(&)[3]>::value, "");
-    static_assert(!std::is_constructible<std::span<int>, volatile int(&)[3]>::value, "");
-    static_assert(!std::is_constructible<std::span<int>, const volatile int(&)[3]>::value, "");
+    static_assert(!std::is_constructible_v<std::span<int>, const int(&)[3]>);
+    static_assert(!std::is_constructible_v<std::span<int>, volatile int(&)[3]>);
+    static_assert(!std::is_constructible_v<std::span<int>, const volatile int(&)[3]>);
 
-    static_assert(!std::is_constructible<std::span<const int>, volatile int(&)[3]>::value, "");
-    static_assert(!std::is_constructible<std::span<const int>, const volatile int(&)[3]>::value, "");
+    static_assert(!std::is_constructible_v<std::span<const int>, volatile int(&)[3]>);
+    static_assert(!std::is_constructible_v<std::span<const int>, const volatile int(&)[3]>);
 
-    static_assert(!std::is_constructible<std::span<volatile int>, const int(&)[3]>::value, "");
-    static_assert(!std::is_constructible<std::span<volatile int>, const volatile int(&)[3]>::value, "");
+    static_assert(!std::is_constructible_v<std::span<volatile int>, const int(&)[3]>);
+    static_assert(!std::is_constructible_v<std::span<volatile int>, const volatile int(&)[3]>);
   }
 
   // CV wrong (statically sized)
   {
-    static_assert(!std::is_constructible<std::span<int, 3>, const int(&)[3]>::value, "");
-    static_assert(!std::is_constructible<std::span<int, 3>, volatile int(&)[3]>::value, "");
-    static_assert(!std::is_constructible<std::span<int, 3>, const volatile int(&)[3]>::value, "");
+    static_assert(!std::is_constructible_v<std::span<int, 3>, const int(&)[3]>);
+    static_assert(!std::is_constructible_v<std::span<int, 3>, volatile int(&)[3]>);
+    static_assert(!std::is_constructible_v<std::span<int, 3>, const volatile int(&)[3]>);
 
-    static_assert(!std::is_constructible<std::span<const int, 3>, volatile int(&)[3]>::value, "");
-    static_assert(!std::is_constructible<std::span<const int, 3>, const volatile int(&)[3]>::value, "");
+    static_assert(!std::is_constructible_v<std::span<const int, 3>, volatile int(&)[3]>);
+    static_assert(!std::is_constructible_v<std::span<const int, 3>, const volatile int(&)[3]>);
 
-    static_assert(!std::is_constructible<std::span<volatile int, 3>, const int(&)[3]>::value, "");
-    static_assert(!std::is_constructible<std::span<volatile int, 3>, const volatile int(&)[3]>::value, "");
+    static_assert(!std::is_constructible_v<std::span<volatile int, 3>, const int(&)[3]>);
+    static_assert(!std::is_constructible_v<std::span<volatile int, 3>, 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..4b313faac235b 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
 
 // <span>
 
-//  constexpr span& operator=(const span& other) noexcept = default;
+// constexpr span& operator=(const span& other) noexcept = default;
 
 #include <span>
 #include <cassert>
@@ -26,15 +27,13 @@ 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};
 int arr[]             = {5, 6, 7, 9};
 std::string strs[]    = {"ABC", "DEF", "GHI"};
 
-int main(int, char**) {
+int main() {
   //  constexpr dynamically sized assignment
   {
     //  On systems where 'ptrdiff_t' is a synonym for 'int',
@@ -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..9716eb641ed8f 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
 
 // <span>
 
-//  constexpr span(const span& other) noexcept = default;
+// constexpr span(const span& other) noexcept = default;
 
 #include <span>
 #include <cassert>
@@ -107,7 +107,7 @@ constexpr bool test_all() {
   return true;
 }
 
-int main(int, char**) {
+int main() {
   test_all();
   static_assert(test_all());
 
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..ce9e923cbf5f0 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
 
 // <span>
 
-//   template<class It, class EndOrSize>
-//     span(It, EndOrSize) -> span<remove_reference_t<iter_reference_t<_It>>>;
-//
-//   template<class T, size_t N>
-//     span(T (&)[N]) -> span<T, N>;
-//
-//   template<class T, size_t N>
-//     span(array<T, N>&) -> span<T, N>;
-//
-//   template<class T, size_t N>
-//     span(const array<T, N>&) -> span<const T, N>;
-//
-//   template<class R>
-//     span(R&&) -> span<remove_reference_t<ranges::range_reference_t<R>>>;
+// template<class It, class EndOrSize>
+//   span(It, EndOrSize) -> span<remove_reference_t<iter_reference_t<It>>>; // until C++26
+// template<class It, class EndOrSize>
+//   span(It, EndOrSize) -> span<remove_reference_t<iter_reference_t<It>>,
+//                               maybe-static-ext<EndOrSize>>; // since C++26
+// template<class T, size_t N>
+//   span(T (&)[N]) -> span<T, N>;
+// template<class T, size_t N>
+//   span(array<T, N>&) -> span<T, N>;
+// template<class T, size_t N>
+//   span(const array<T, N>&) -> span<const T, N>;
+// template<class R>
+//   span(R&&) -> span<remove_reference_t<ranges::range_reference_t<R>>>;
 
 #include <span>
 #include <array>
@@ -130,7 +130,7 @@ void test_range_std_container() {
   }
 }
 
-int main(int, char**) {
+int main() {
   test_iterator_sentinel();
   test_c_array();
   test_std_array();
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..4f3e6b4692786 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
 
 // <span>
 
@@ -56,11 +57,11 @@ void testRuntimeSpan() {
 
 struct A {};
 
-int main(int, char**) {
-  static_assert(testConstexprSpan<int>(), "");
-  static_assert(testConstexprSpan<long>(), "");
-  static_assert(testConstexprSpan<double>(), "");
-  static_assert(testConstexprSpan<A>(), "");
+int main() {
+  static_assert(testConstexprSpan<int>());
+  static_assert(testConstexprSpan<long>());
+  static_assert(testConstexprSpan<double>());
+  static_assert(testConstexprSpan<A>());
 
   testRuntimeSpan<int>();
   testRuntimeSpan<long>();
@@ -70,9 +71,9 @@ int main(int, char**) {
 
   checkCV();
 
-  static_assert(std::is_default_constructible_v<std::span<int, std::dynamic_extent>>, "");
-  static_assert(std::is_default_constructible_v<std::span<int, 0>>, "");
-  static_assert(!std::is_default_constructible_v<std::span<int, 2>>, "");
+  static_assert(std::is_default_constructible_v<std::span<int, std::dynamic_extent>>);
+  static_assert(std::is_default_constructible_v<std::span<int, 0>>);
+  static_assert(!std::is_default_constructible_v<std::span<int, 2>>);
 
   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..4ef785e8002f6 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
 
 // <span>
 
@@ -15,7 +15,6 @@
 #include <cstddef>
 #include <span>
 
-#include "test_convertible.h"
 #include "test_macros.h"
 
 struct Sink {
@@ -60,7 +59,7 @@ bool test_P2447R4_annex_c_examples() {
   return true;
 }
 
-int main(int, char**) {
+int main() {
   assert(test());
   static_assert(test());
 
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..8a0b4c7ced2d4 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
 
 // <span>
 
-// template <class It>
-// 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<class It>
+//   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 <cassert>
 #include <cstddef>
@@ -60,7 +62,7 @@ constexpr bool test() {
   return true;
 }
 
-int main(int, char**) {
+int main() {
   test();
   static_assert(test());
 
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
 
 // <span>
 
-// template <class It>
-// 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<class It>
+//   constexpr explicit(extent != dynamic_extent) span(It first, size_type count);
+//
+// Constraints: Let U be remove_reference_t<iter_reference_t<It>>.
+//   - It satisfies contiguous_iterator.
+//   - is_convertible_v<U(*)[], element_type(*)[]> 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 <span>
 #include <cstddef>
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..49ae38038141d 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
 
 // <span>
 
-// template <class It, class End>
-// 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<class It, class End>
+//   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 <array>
 #include <span>
 #include <cassert>
-#include <utility>
 
 #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<It>::value_type value_type;
-  typedef typename std::iterator_traits<It>::difference_type difference_type;
-  typedef It pointer;
-  typedef typename std::iterator_traits<It>::reference reference;
-  typedef std::remove_reference_t<reference> element_type;
+  using iterator_category = std::contiguous_iterator_tag;
+  using value_type        = std::iterator_traits<It>::value_type;
+  using difference_type   = std::iterator_traits<It>::difference_type;
+  using pointer           = It;
+  using reference         = std::iterator_traits<It>::reference;
+  using element_type      = std::remove_reference_t<reference>;
 
   throw_operator_minus() : it_() {}
   explicit throw_operator_minus(It it) : it_(it) {}
@@ -136,7 +142,7 @@ void test_exceptions() {
 }
 #endif // TEST_HAS_NO_EXCEPTIONS
 
-int main(int, char**) {
+int main() {
   test();
 #ifndef TEST_HAS_NO_EXCEPTIONS
   test_exceptions();
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
 
 // <span>
 
-// template <class It, class End>
-// 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<class It, class End>
+//   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 <cstddef>
 #include <iterator>
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..6342510a9f7cf 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
 
 // <span>
 
-//  template<class R>
-//    constexpr explicit(Extent != dynamic_extent) span(R&& r);
+// template<class R>
+//   constexpr explicit(Extent != dynamic_extent) span(R&& r);
 
 #include <span>
 #include <cassert>
@@ -79,7 +80,7 @@ static_assert(!std::is_convertible_v<BorrowedContiguousSizedRange&, std::span<ch
 static_assert(std::is_convertible_v<const BorrowedContiguousSizedRange&, std::span<const char>>);
 static_assert(!std::is_convertible_v<const BorrowedContiguousSizedRange&, std::span<const char, 3>>);
 
-int main(int, char**) {
+int main() {
   test();
   static_assert(test());
 
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
 
 // <span>
 
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..6c80d1af1334e 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
 
 // <span>
 
 // template<class OtherElementType, size_t OtherExtent>
-//    constexpr span(const span<OtherElementType, OtherExtent>& s) noexcept;
+//   constexpr explicit(see below) span(const span<OtherElementType, OtherExtent>& 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<OtherElementType(*)[], element_type(*)[]> is true.
 
 #include <span>
 #include <cassert>
@@ -113,7 +114,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main(int, char**) {
+int main() {
   static_assert(test());
   test();
 
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..3c143f15a446e 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
 
 // <span>
 
 // template<class OtherElementType, size_t OtherExtent>
-//    constexpr span(const span<OtherElementType, OtherExtent>& s) noexcept;
+//   constexpr explicit(see below) span(const span<OtherElementType, OtherExtent>& 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<OtherElementType(*)[], element_type(*)[]> is true.
 
 #include <span>
-#include <cassert>
 #include <string>
 
 #include "test_macros.h"
@@ -28,38 +28,38 @@ std::span<T, extent> createImplicitSpan(std::span<T, otherExtent> s) {
 }
 
 void checkCV() {
-  //  std::span<               int>   sp;
+  // std::span<int> sp;
   std::span<const int> csp;
-  std::span< volatile int> vsp;
+  std::span<volatile int> vsp;
   std::span<const volatile int> cvsp;
 
-  //  std::span<               int, 0>   sp0;
+  // std::span<int, 0> sp0;
   std::span<const int, 0> csp0;
-  std::span< volatile int, 0> vsp0;
+  std::span<volatile int, 0> vsp0;
   std::span<const volatile int, 0> 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<int>'}}
-    std::span< int> s2{vsp};  // expected-error {{no matching constructor for initialization of 'std::span<int>'}}
-    std::span< int> s3{cvsp}; // expected-error {{no matching constructor for initialization of 'std::span<int>'}}
+    std::span<int> s1{csp};  // expected-error {{no matching constructor for initialization of 'std::span<int>'}}
+    std::span<int> s2{vsp};  // expected-error {{no matching constructor for initialization of 'std::span<int>'}}
+    std::span<int> s3{cvsp}; // expected-error {{no matching constructor for initialization of 'std::span<int>'}}
 
     std::span<const int> s4{vsp};
     // expected-error at -1 {{no matching constructor for initialization of 'std::span<const int>'}}
     std::span<const int> s5{cvsp};
     // expected-error at -1 {{no matching constructor for initialization of 'std::span<const int>'}}
 
-    std::span< volatile int> s6{csp};
+    std::span<volatile int> s6{csp};
     // expected-error at -1 {{no matching constructor for initialization of 'std::span<volatile int>'}}
-    std::span< volatile int> s7{cvsp};
+    std::span<volatile int> s7{cvsp};
     // expected-error at -1 {{no matching constructor for initialization of 'std::span<volatile int>'}}
   }
 
   //  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<int, 0>'}}
-    std::span< int, 0> s2{vsp0}; // expected-error {{no matching constructor for initialization of 'std::span<int, 0>'}}
-    std::span< int, 0> s3{cvsp0};
+    std::span<int, 0> s1{csp0}; // expected-error {{no matching constructor for initialization of 'std::span<int, 0>'}}
+    std::span<int, 0> s2{vsp0}; // expected-error {{no matching constructor for initialization of 'std::span<int, 0>'}}
+    std::span<int, 0> s3{cvsp0};
     // expected-error at -1 {{no matching constructor for initialization of 'std::span<int, 0>'}}
 
     std::span<const int, 0> s4{vsp0};
@@ -67,48 +67,48 @@ void checkCV() {
     std::span<const int, 0> s5{cvsp0};
     // expected-error at -1 {{no matching constructor for initialization of 'std::span<const int, 0>'}}
 
-    std::span< volatile int, 0> s6{csp0};
+    std::span<volatile int, 0> s6{csp0};
     // expected-error at -1 {{no matching constructor for initialization of 'std::span<volatile int, 0>'}}
-    std::span< volatile int, 0> s7{cvsp0};
+    std::span<volatile int, 0> s7{cvsp0};
     // expected-error at -1 {{no matching constructor for initialization of 'std::span<volatile int, 0>'}}
   }
 
   //  Try to remove const and/or volatile (static -> dynamic)
   {
-    std::span< int> s1{csp0};  // expected-error {{no matching constructor for initialization of 'std::span<int>'}}
-    std::span< int> s2{vsp0};  // expected-error {{no matching constructor for initialization of 'std::span<int>'}}
-    std::span< int> s3{cvsp0}; // expected-error {{no matching constructor for initialization of 'std::span<int>'}}
+    std::span<int> s1{csp0};  // expected-error {{no matching constructor for initialization of 'std::span<int>'}}
+    std::span<int> s2{vsp0};  // expected-error {{no matching constructor for initialization of 'std::span<int>'}}
+    std::span<int> s3{cvsp0}; // expected-error {{no matching constructor for initialization of 'std::span<int>'}}
 
     std::span<const int> s4{vsp0};
     // expected-error at -1 {{no matching constructor for initialization of 'std::span<const int>'}}
     std::span<const int> s5{cvsp0};
     // expected-error at -1 {{no matching constructor for initialization of 'std::span<const int>'}}
 
-    std::span< volatile int> s6{csp0};
+    std::span<volatile int> s6{csp0};
     // expected-error at -1 {{no matching constructor for initialization of 'std::span<volatile int>'}}
-    std::span< volatile int> s7{cvsp0};
+    std::span<volatile int> s7{cvsp0};
     // expected-error at -1 {{no matching constructor for initialization of 'std::span<volatile int>'}}
   }
 
   //  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<int, 0>'}}
-    std::span< int, 0> s2{vsp};  // expected-error {{no matching constructor for initialization of 'std::span<int, 0>'}}
-    std::span< int, 0> s3{cvsp}; // expected-error {{no matching constructor for initialization of 'std::span<int, 0>'}}
+    std::span<int, 0> s1{csp};  // expected-error {{no matching constructor for initialization of 'std::span<int, 0>'}}
+    std::span<int, 0> s2{vsp};  // expected-error {{no matching constructor for initialization of 'std::span<int, 0>'}}
+    std::span<int, 0> s3{cvsp}; // expected-error {{no matching constructor for initialization of 'std::span<int, 0>'}}
 
     std::span<const int, 0> s4{vsp};
     // expected-error at -1 {{no matching constructor for initialization of 'std::span<const int, 0>'}}
     std::span<const int, 0> s5{cvsp};
     // expected-error at -1 {{no matching constructor for initialization of 'std::span<const int, 0>'}}
 
-    std::span< volatile int, 0> s6{csp};
+    std::span<volatile int, 0> s6{csp};
     // expected-error at -1 {{no matching constructor for initialization of 'std::span<volatile int, 0>'}}
-    std::span< volatile int, 0> s7{cvsp};
+    std::span<volatile int, 0> s7{cvsp};
     // expected-error at -1 {{no matching constructor for initialization of 'std::span<volatile int, 0>'}}
   }
 }
 
-int main(int, char**) {
+int main() {
   std::span<int> sp;
   std::span<int, 0> sp0;
 
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..9f218e5a26b78 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
 
 // <span>
 
-// template<size_t N>
-//     constexpr span(array<value_type, N>& arr) noexcept;
-// template<size_t N>
-//     constexpr span(const array<value_type, N>& arr) noexcept;
+// template<class T, size_t N> constexpr span(array<T, N>& arr) noexcept;
+// template<class T, size_t N> constexpr span(const array<T, N>& arr) noexcept;
 //
-// Remarks: These constructors shall not participate in overload resolution unless:
+// Constraints: Let U be remove_pointer_t<decltype(std::data(arr))>.
 //   - extent == dynamic_extent || N == extent is true, and
-//   - remove_pointer_t<decltype(data(arr))>(*)[] is convertible to ElementType(*)[].
-//
+//   - is_convertible_v<U(*)[], element_type(*)[]> is true.
 
 #include <span>
 #include <array>
 #include <cassert>
-#include <string>
 
 #include "test_macros.h"
 
@@ -35,28 +32,28 @@ void checkCV() {
 
   //  Types the same (dynamic sized)
   {
-    std::span< int> s1{arr}; // a span<               int> pointing at int.
+    std::span<int> s1{arr}; // a span<int> pointing at int.
   }
 
   //  Types the same (static sized)
   {
-    std::span< int, 3> s1{arr}; // a span<               int> pointing at int.
+    std::span<int, 3> s1{arr}; // a span<int> pointing at int.
   }
 
   //  types different (dynamic sized)
   {
-    std::span<const int> s1{arr};          // a span<const          int> 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<const int> s1{arr};          // a span<const int> 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<const volatile int> s4{arr}; // a span<const volatile int> pointing at int.
   }
 
   //  types different (static sized)
   {
-    std::span<const int, 3> s1{arr};          // a span<const          int> 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<const volatile int, 3> s4{arr}; // a span<const volatile int> pointing at int.
+    std::span<const int, 3> s1{arr};           // a span<const int> 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<const volatile int, 3> s4{arr};  // a span<const volatile int> pointing at int.
   }
 }
 
@@ -82,12 +79,12 @@ constexpr bool testConstructorConstArray() {
 
 template <typename T>
 constexpr bool testConstructors() {
-  static_assert(testConstructorArray<T, T>(), "");
-  static_assert(testConstructorArray<const T, const T>(), "");
-  static_assert(testConstructorArray<const T, T>(), "");
-  static_assert(testConstructorConstArray<T, T>(), "");
-  static_assert(testConstructorConstArray<const T, const T>(), "");
-  static_assert(testConstructorConstArray<const T, T>(), "");
+  static_assert(testConstructorArray<T, T>());
+  static_assert(testConstructorArray<const T, const T>());
+  static_assert(testConstructorArray<const T, T>());
+  static_assert(testConstructorConstArray<T, T>());
+  static_assert(testConstructorConstArray<const T, const T>());
+  static_assert(testConstructorConstArray<const T, T>());
 
   return testConstructorArray<T, T>() && testConstructorArray<const T, const T>() &&
          testConstructorArray<const T, T>() && testConstructorConstArray<T, T>() &&
@@ -96,7 +93,7 @@ constexpr bool testConstructors() {
 
 struct A {};
 
-int main(int, char**) {
+int main() {
   assert(testConstructors<int>());
   assert(testConstructors<long>());
   assert(testConstructors<double>());
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
 
 // <span>
 
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..6aa3e799ac2ee 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
 
 // <span>
 
-// 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 <span>
 #include <cassert>
@@ -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<const int>(iArr1, 1)), "");
-  static_assert(testConstexprSpan(std::span<const int>(iArr1, 2)), "");
-  static_assert(testConstexprSpan(std::span<const int>(iArr1, 3)), "");
-  static_assert(testConstexprSpan(std::span<const int>(iArr1, 4)), "");
+int main() {
+  static_assert(testConstexprSpan(std::span<const int>(iArr1, 1)));
+  static_assert(testConstexprSpan(std::span<const int>(iArr1, 2)));
+  static_assert(testConstexprSpan(std::span<const int>(iArr1, 3)));
+  static_assert(testConstexprSpan(std::span<const int>(iArr1, 4)));
 
-  static_assert(testConstexprSpan(std::span<const int, 1>(iArr1, 1)), "");
-  static_assert(testConstexprSpan(std::span<const int, 2>(iArr1, 2)), "");
-  static_assert(testConstexprSpan(std::span<const int, 3>(iArr1, 3)), "");
-  static_assert(testConstexprSpan(std::span<const int, 4>(iArr1, 4)), "");
+  static_assert(testConstexprSpan(std::span<const int, 1>(iArr1, 1)));
+  static_assert(testConstexprSpan(std::span<const int, 2>(iArr1, 2)));
+  static_assert(testConstexprSpan(std::span<const int, 3>(iArr1, 3)));
+  static_assert(testConstexprSpan(std::span<const int, 4>(iArr1, 4)));
 
   testRuntimeSpan(std::span<int>(iArr2, 1));
   testRuntimeSpan(std::span<int>(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..46ba32cbd14c5 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
 
 // <span>
 
 // constexpr pointer data() const noexcept;
-//
 
 #include <span>
 #include <cassert>
@@ -34,40 +34,40 @@ 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**) {
+int main() {
   //  dynamic size
-  static_assert(testConstexprSpan(std::span<int>(), nullptr), "");
-  static_assert(testConstexprSpan(std::span<long>(), nullptr), "");
-  static_assert(testConstexprSpan(std::span<double>(), nullptr), "");
-  static_assert(testConstexprSpan(std::span<A>(), nullptr), "");
-  static_assert(testConstexprSpan(std::span<std::string>(), nullptr), "");
-
-  static_assert(testConstexprSpan(std::span<const int>(iArr1, 1), iArr1), "");
-  static_assert(testConstexprSpan(std::span<const int>(iArr1, 2), iArr1), "");
-  static_assert(testConstexprSpan(std::span<const int>(iArr1, 3), iArr1), "");
-  static_assert(testConstexprSpan(std::span<const int>(iArr1, 4), iArr1), "");
-
-  static_assert(testConstexprSpan(std::span<const int>(iArr1 + 1, 1), iArr1 + 1), "");
-  static_assert(testConstexprSpan(std::span<const int>(iArr1 + 2, 2), iArr1 + 2), "");
-  static_assert(testConstexprSpan(std::span<const int>(iArr1 + 3, 3), iArr1 + 3), "");
-  static_assert(testConstexprSpan(std::span<const int>(iArr1 + 4, 4), iArr1 + 4), "");
+  static_assert(testConstexprSpan(std::span<int>(), nullptr));
+  static_assert(testConstexprSpan(std::span<long>(), nullptr));
+  static_assert(testConstexprSpan(std::span<double>(), nullptr));
+  static_assert(testConstexprSpan(std::span<A>(), nullptr));
+  static_assert(testConstexprSpan(std::span<std::string>(), nullptr));
+
+  static_assert(testConstexprSpan(std::span<const int>(iArr1, 1), iArr1));
+  static_assert(testConstexprSpan(std::span<const int>(iArr1, 2), iArr1));
+  static_assert(testConstexprSpan(std::span<const int>(iArr1, 3), iArr1));
+  static_assert(testConstexprSpan(std::span<const int>(iArr1, 4), iArr1));
+
+  static_assert(testConstexprSpan(std::span<const int>(iArr1 + 1, 1), iArr1 + 1));
+  static_assert(testConstexprSpan(std::span<const int>(iArr1 + 2, 2), iArr1 + 2));
+  static_assert(testConstexprSpan(std::span<const int>(iArr1 + 3, 3), iArr1 + 3));
+  static_assert(testConstexprSpan(std::span<const int>(iArr1 + 4, 4), iArr1 + 4));
 
   //  static size
-  static_assert(testConstexprSpan(std::span<int, 0>(), nullptr), "");
-  static_assert(testConstexprSpan(std::span<long, 0>(), nullptr), "");
-  static_assert(testConstexprSpan(std::span<double, 0>(), nullptr), "");
-  static_assert(testConstexprSpan(std::span<A, 0>(), nullptr), "");
-  static_assert(testConstexprSpan(std::span<std::string, 0>(), nullptr), "");
-
-  static_assert(testConstexprSpan(std::span<const int, 1>(iArr1, 1), iArr1), "");
-  static_assert(testConstexprSpan(std::span<const int, 2>(iArr1, 2), iArr1), "");
-  static_assert(testConstexprSpan(std::span<const int, 3>(iArr1, 3), iArr1), "");
-  static_assert(testConstexprSpan(std::span<const int, 4>(iArr1, 4), iArr1), "");
-
-  static_assert(testConstexprSpan(std::span<const int, 1>(iArr1 + 1, 1), iArr1 + 1), "");
-  static_assert(testConstexprSpan(std::span<const int, 2>(iArr1 + 2, 2), iArr1 + 2), "");
-  static_assert(testConstexprSpan(std::span<const int, 3>(iArr1 + 3, 3), iArr1 + 3), "");
-  static_assert(testConstexprSpan(std::span<const int, 4>(iArr1 + 4, 4), iArr1 + 4), "");
+  static_assert(testConstexprSpan(std::span<int, 0>(), nullptr));
+  static_assert(testConstexprSpan(std::span<long, 0>(), nullptr));
+  static_assert(testConstexprSpan(std::span<double, 0>(), nullptr));
+  static_assert(testConstexprSpan(std::span<A, 0>(), nullptr));
+  static_assert(testConstexprSpan(std::span<std::string, 0>(), nullptr));
+
+  static_assert(testConstexprSpan(std::span<const int, 1>(iArr1, 1), iArr1));
+  static_assert(testConstexprSpan(std::span<const int, 2>(iArr1, 2), iArr1));
+  static_assert(testConstexprSpan(std::span<const int, 3>(iArr1, 3), iArr1));
+  static_assert(testConstexprSpan(std::span<const int, 4>(iArr1, 4), iArr1));
+
+  static_assert(testConstexprSpan(std::span<const int, 1>(iArr1 + 1, 1), iArr1 + 1));
+  static_assert(testConstexprSpan(std::span<const int, 2>(iArr1 + 2, 2), iArr1 + 2));
+  static_assert(testConstexprSpan(std::span<const int, 3>(iArr1 + 3, 3), iArr1 + 3));
+  static_assert(testConstexprSpan(std::span<const int, 4>(iArr1 + 4, 4), iArr1 + 4));
 
   //  dynamic size
   testRuntimeSpan(std::span<int>(), 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
 
 // <span>
 
-// 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 <span>
 #include <cassert>
@@ -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<const int>(iArr1, 1)), "");
-  static_assert(testConstexprSpan(std::span<const int>(iArr1, 2)), "");
-  static_assert(testConstexprSpan(std::span<const int>(iArr1, 3)), "");
-  static_assert(testConstexprSpan(std::span<const int>(iArr1, 4)), "");
-
-  static_assert(testConstexprSpan(std::span<const int, 1>(iArr1, 1)), "");
-  static_assert(testConstexprSpan(std::span<const int, 2>(iArr1, 2)), "");
-  static_assert(testConstexprSpan(std::span<const int, 3>(iArr1, 3)), "");
-  static_assert(testConstexprSpan(std::span<const int, 4>(iArr1, 4)), "");
+  static_assert(testConstexprSpan(std::span<const int>(iArr1, 1)));
+  static_assert(testConstexprSpan(std::span<const int>(iArr1, 2)));
+  static_assert(testConstexprSpan(std::span<const int>(iArr1, 3)));
+  static_assert(testConstexprSpan(std::span<const int>(iArr1, 4)));
+
+  static_assert(testConstexprSpan(std::span<const int, 1>(iArr1, 1)));
+  static_assert(testConstexprSpan(std::span<const int, 2>(iArr1, 2)));
+  static_assert(testConstexprSpan(std::span<const int, 3>(iArr1, 3)));
+  static_assert(testConstexprSpan(std::span<const int, 4>(iArr1, 4)));
 
   testRuntimeSpan(std::span<int>(iArr2, 1));
   testRuntimeSpan(std::span<int>(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
 
 // <span>
 
 // constexpr reference operator[](size_type idx) const;
 //
+// Hardened preconditions:
+//   - idx < size() is true.
+//
+// Returns:
+//   - *(data() + idx).
+// Throws:
+//   - Nothing.
 
 #include <span>
 #include <cassert>
@@ -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<const int>(iArr1, 1), 0), "");
+  static_assert(testConstexprSpan(std::span<const int>(iArr1, 1), 0));
 
-  static_assert(testConstexprSpan(std::span<const int>(iArr1, 2), 0), "");
-  static_assert(testConstexprSpan(std::span<const int>(iArr1, 2), 1), "");
+  static_assert(testConstexprSpan(std::span<const int>(iArr1, 2), 0));
+  static_assert(testConstexprSpan(std::span<const int>(iArr1, 2), 1));
 
-  static_assert(testConstexprSpan(std::span<const int>(iArr1, 3), 0), "");
-  static_assert(testConstexprSpan(std::span<const int>(iArr1, 3), 1), "");
-  static_assert(testConstexprSpan(std::span<const int>(iArr1, 3), 2), "");
+  static_assert(testConstexprSpan(std::span<const int>(iArr1, 3), 0));
+  static_assert(testConstexprSpan(std::span<const int>(iArr1, 3), 1));
+  static_assert(testConstexprSpan(std::span<const int>(iArr1, 3), 2));
 
-  static_assert(testConstexprSpan(std::span<const int>(iArr1, 4), 0), "");
-  static_assert(testConstexprSpan(std::span<const int>(iArr1, 4), 1), "");
-  static_assert(testConstexprSpan(std::span<const int>(iArr1, 4), 2), "");
-  static_assert(testConstexprSpan(std::span<const int>(iArr1, 4), 3), "");
+  static_assert(testConstexprSpan(std::span<const int>(iArr1, 4), 0));
+  static_assert(testConstexprSpan(std::span<const int>(iArr1, 4), 1));
+  static_assert(testConstexprSpan(std::span<const int>(iArr1, 4), 2));
+  static_assert(testConstexprSpan(std::span<const int>(iArr1, 4), 3));
 
-  static_assert(testConstexprSpan(std::span<const int, 1>(iArr1, 1), 0), "");
+  static_assert(testConstexprSpan(std::span<const int, 1>(iArr1, 1), 0));
 
-  static_assert(testConstexprSpan(std::span<const int, 2>(iArr1, 2), 0), "");
-  static_assert(testConstexprSpan(std::span<const int, 2>(iArr1, 2), 1), "");
+  static_assert(testConstexprSpan(std::span<const int, 2>(iArr1, 2), 0));
+  static_assert(testConstexprSpan(std::span<const int, 2>(iArr1, 2), 1));
 
-  static_assert(testConstexprSpan(std::span<const int, 3>(iArr1, 3), 0), "");
-  static_assert(testConstexprSpan(std::span<const int, 3>(iArr1, 3), 1), "");
-  static_assert(testConstexprSpan(std::span<const int, 3>(iArr1, 3), 2), "");
+  static_assert(testConstexprSpan(std::span<const int, 3>(iArr1, 3), 0));
+  static_assert(testConstexprSpan(std::span<const int, 3>(iArr1, 3), 1));
+  static_assert(testConstexprSpan(std::span<const int, 3>(iArr1, 3), 2));
 
-  static_assert(testConstexprSpan(std::span<const int, 4>(iArr1, 4), 0), "");
-  static_assert(testConstexprSpan(std::span<const int, 4>(iArr1, 4), 1), "");
-  static_assert(testConstexprSpan(std::span<const int, 4>(iArr1, 4), 2), "");
-  static_assert(testConstexprSpan(std::span<const int, 4>(iArr1, 4), 3), "");
+  static_assert(testConstexprSpan(std::span<const int, 4>(iArr1, 4), 0));
+  static_assert(testConstexprSpan(std::span<const int, 4>(iArr1, 4), 1));
+  static_assert(testConstexprSpan(std::span<const int, 4>(iArr1, 4), 2));
+  static_assert(testConstexprSpan(std::span<const int, 4>(iArr1, 4), 3));
 
   testRuntimeSpan(std::span<int>(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..782786234da75 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
 
 // <span>
 
@@ -50,24 +51,24 @@ bool operator==(A, A) { return true; }
 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<int>()), "");
-  static_assert(testConstexprSpan(std::span<long>()), "");
-  static_assert(testConstexprSpan(std::span<double>()), "");
-  static_assert(testConstexprSpan(std::span<A>()), "");
-  static_assert(testConstexprSpan(std::span<std::string>()), "");
-
-  static_assert(testConstexprSpan(std::span<int, 0>()), "");
-  static_assert(testConstexprSpan(std::span<long, 0>()), "");
-  static_assert(testConstexprSpan(std::span<double, 0>()), "");
-  static_assert(testConstexprSpan(std::span<A, 0>()), "");
-  static_assert(testConstexprSpan(std::span<std::string, 0>()), "");
-
-  static_assert(testConstexprSpan(std::span<const int>(iArr1, 1)), "");
-  static_assert(testConstexprSpan(std::span<const int>(iArr1, 2)), "");
-  static_assert(testConstexprSpan(std::span<const int>(iArr1, 3)), "");
-  static_assert(testConstexprSpan(std::span<const int>(iArr1, 4)), "");
-  static_assert(testConstexprSpan(std::span<const int>(iArr1, 5)), "");
+int main() {
+  static_assert(testConstexprSpan(std::span<int>()));
+  static_assert(testConstexprSpan(std::span<long>()));
+  static_assert(testConstexprSpan(std::span<double>()));
+  static_assert(testConstexprSpan(std::span<A>()));
+  static_assert(testConstexprSpan(std::span<std::string>()));
+
+  static_assert(testConstexprSpan(std::span<int, 0>()));
+  static_assert(testConstexprSpan(std::span<long, 0>()));
+  static_assert(testConstexprSpan(std::span<double, 0>()));
+  static_assert(testConstexprSpan(std::span<A, 0>()));
+  static_assert(testConstexprSpan(std::span<std::string, 0>()));
+
+  static_assert(testConstexprSpan(std::span<const int>(iArr1, 1)));
+  static_assert(testConstexprSpan(std::span<const int>(iArr1, 2)));
+  static_assert(testConstexprSpan(std::span<const int>(iArr1, 3)));
+  static_assert(testConstexprSpan(std::span<const int>(iArr1, 4)));
+  static_assert(testConstexprSpan(std::span<const int>(iArr1, 5)));
 
   testRuntimeSpan(std::span<int>());
   testRuntimeSpan(std::span<long>());
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..9cce7c42966b7 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
 
 // <span>
 
@@ -54,24 +55,24 @@ bool operator==(A, A) { return true; }
 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<int>()), "");
-  static_assert(testConstexprSpan(std::span<long>()), "");
-  static_assert(testConstexprSpan(std::span<double>()), "");
-  static_assert(testConstexprSpan(std::span<A>()), "");
-  static_assert(testConstexprSpan(std::span<std::string>()), "");
-
-  static_assert(testConstexprSpan(std::span<int, 0>()), "");
-  static_assert(testConstexprSpan(std::span<long, 0>()), "");
-  static_assert(testConstexprSpan(std::span<double, 0>()), "");
-  static_assert(testConstexprSpan(std::span<A, 0>()), "");
-  static_assert(testConstexprSpan(std::span<std::string, 0>()), "");
-
-  static_assert(testConstexprSpan(std::span<const int>(iArr1, 1)), "");
-  static_assert(testConstexprSpan(std::span<const int>(iArr1, 2)), "");
-  static_assert(testConstexprSpan(std::span<const int>(iArr1, 3)), "");
-  static_assert(testConstexprSpan(std::span<const int>(iArr1, 4)), "");
-  static_assert(testConstexprSpan(std::span<const int>(iArr1, 5)), "");
+int main() {
+  static_assert(testConstexprSpan(std::span<int>()));
+  static_assert(testConstexprSpan(std::span<long>()));
+  static_assert(testConstexprSpan(std::span<double>()));
+  static_assert(testConstexprSpan(std::span<A>()));
+  static_assert(testConstexprSpan(std::span<std::string>()));
+
+  static_assert(testConstexprSpan(std::span<int, 0>()));
+  static_assert(testConstexprSpan(std::span<long, 0>()));
+  static_assert(testConstexprSpan(std::span<double, 0>()));
+  static_assert(testConstexprSpan(std::span<A, 0>()));
+  static_assert(testConstexprSpan(std::span<std::string, 0>()));
+
+  static_assert(testConstexprSpan(std::span<const int>(iArr1, 1)));
+  static_assert(testConstexprSpan(std::span<const int>(iArr1, 2)));
+  static_assert(testConstexprSpan(std::span<const int>(iArr1, 3)));
+  static_assert(testConstexprSpan(std::span<const int>(iArr1, 4)));
+  static_assert(testConstexprSpan(std::span<const int>(iArr1, 5)));
 
   testRuntimeSpan(std::span<int>());
   testRuntimeSpan(std::span<long>());
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..d6c4f5c2425d1 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
 
 // <span>
 
@@ -84,9 +84,9 @@ constexpr bool test() {
   return true;
 }
 
-int main(int, char**) {
+int main() {
   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..130c5e6f812dc 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
 
 // <span>
 
@@ -50,24 +51,24 @@ bool operator==(A, A) { return true; }
 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<int>()), "");
-  static_assert(testConstexprSpan(std::span<long>()), "");
-  static_assert(testConstexprSpan(std::span<double>()), "");
-  static_assert(testConstexprSpan(std::span<A>()), "");
-  static_assert(testConstexprSpan(std::span<std::string>()), "");
-
-  static_assert(testConstexprSpan(std::span<int, 0>()), "");
-  static_assert(testConstexprSpan(std::span<long, 0>()), "");
-  static_assert(testConstexprSpan(std::span<double, 0>()), "");
-  static_assert(testConstexprSpan(std::span<A, 0>()), "");
-  static_assert(testConstexprSpan(std::span<std::string, 0>()), "");
-
-  static_assert(testConstexprSpan(std::span<const int>(iArr1, 1)), "");
-  static_assert(testConstexprSpan(std::span<const int>(iArr1, 2)), "");
-  static_assert(testConstexprSpan(std::span<const int>(iArr1, 3)), "");
-  static_assert(testConstexprSpan(std::span<const int>(iArr1, 4)), "");
-  static_assert(testConstexprSpan(std::span<const int>(iArr1, 5)), "");
+int main() {
+  static_assert(testConstexprSpan(std::span<int>()));
+  static_assert(testConstexprSpan(std::span<long>()));
+  static_assert(testConstexprSpan(std::span<double>()));
+  static_assert(testConstexprSpan(std::span<A>()));
+  static_assert(testConstexprSpan(std::span<std::string>()));
+
+  static_assert(testConstexprSpan(std::span<int, 0>()));
+  static_assert(testConstexprSpan(std::span<long, 0>()));
+  static_assert(testConstexprSpan(std::span<double, 0>()));
+  static_assert(testConstexprSpan(std::span<A, 0>()));
+  static_assert(testConstexprSpan(std::span<std::string, 0>()));
+
+  static_assert(testConstexprSpan(std::span<const int>(iArr1, 1)));
+  static_assert(testConstexprSpan(std::span<const int>(iArr1, 2)));
+  static_assert(testConstexprSpan(std::span<const int>(iArr1, 3)));
+  static_assert(testConstexprSpan(std::span<const int>(iArr1, 4)));
+  static_assert(testConstexprSpan(std::span<const int>(iArr1, 5)));
 
   testRuntimeSpan(std::span<int>());
   testRuntimeSpan(std::span<long>());
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..c4082d5ef6c87 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
 
 // <span>
 
@@ -50,24 +51,24 @@ bool operator==(A, A) { return true; }
 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<int>()), "");
-  static_assert(testConstexprSpan(std::span<long>()), "");
-  static_assert(testConstexprSpan(std::span<double>()), "");
-  static_assert(testConstexprSpan(std::span<A>()), "");
-  static_assert(testConstexprSpan(std::span<std::string>()), "");
-
-  static_assert(testConstexprSpan(std::span<int, 0>()), "");
-  static_assert(testConstexprSpan(std::span<long, 0>()), "");
-  static_assert(testConstexprSpan(std::span<double, 0>()), "");
-  static_assert(testConstexprSpan(std::span<A, 0>()), "");
-  static_assert(testConstexprSpan(std::span<std::string, 0>()), "");
-
-  static_assert(testConstexprSpan(std::span<const int>(iArr1, 1)), "");
-  static_assert(testConstexprSpan(std::span<const int>(iArr1, 2)), "");
-  static_assert(testConstexprSpan(std::span<const int>(iArr1, 3)), "");
-  static_assert(testConstexprSpan(std::span<const int>(iArr1, 4)), "");
-  static_assert(testConstexprSpan(std::span<const int>(iArr1, 5)), "");
+int main() {
+  static_assert(testConstexprSpan(std::span<int>()));
+  static_assert(testConstexprSpan(std::span<long>()));
+  static_assert(testConstexprSpan(std::span<double>()));
+  static_assert(testConstexprSpan(std::span<A>()));
+  static_assert(testConstexprSpan(std::span<std::string>()));
+
+  static_assert(testConstexprSpan(std::span<int, 0>()));
+  static_assert(testConstexprSpan(std::span<long, 0>()));
+  static_assert(testConstexprSpan(std::span<double, 0>()));
+  static_assert(testConstexprSpan(std::span<A, 0>()));
+  static_assert(testConstexprSpan(std::span<std::string, 0>()));
+
+  static_assert(testConstexprSpan(std::span<const int>(iArr1, 1)));
+  static_assert(testConstexprSpan(std::span<const int>(iArr1, 2)));
+  static_assert(testConstexprSpan(std::span<const int>(iArr1, 3)));
+  static_assert(testConstexprSpan(std::span<const int>(iArr1, 4)));
+  static_assert(testConstexprSpan(std::span<const int>(iArr1, 5)));
 
   testRuntimeSpan(std::span<int>());
   testRuntimeSpan(std::span<long>());
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..ee1f8d8bd5b6f 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
 
 // <span>
 
@@ -96,7 +97,7 @@ void test_constraints() {
   static_assert(!hasAsBytes<const volatile std::string, 0>);
 }
 
-int main(int, char**) {
+int main() {
   test_constraints();
 
   testRuntimeSpan(std::span<int>());
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..283fd98382a9c 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
 
 // <span>
 
@@ -96,7 +97,7 @@ void test_constraints() {
   static_assert(!hasAsWritableBytes<const volatile std::string, 0>);
 }
 
-int main(int, char**) {
+int main() {
   test_constraints();
 
   testRuntimeSpan(std::span<int>());
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
 
 // <span>
 
-// [[nodiscard]] constexpr bool empty() const noexcept;
+// constexpr bool empty() const noexcept;
 
 #include <span>
 
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..cabb1f04f17d0 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
 
 // <span>
 
-// [[nodiscard]] constexpr bool empty() const noexcept;
+// constexpr bool empty() const noexcept;
 //
+// Effects:
+//   - Equivalent to: return size() == 0;
 
 #include <span>
 #include <cassert>
@@ -22,27 +25,27 @@ 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(noexcept(std::span<int>().empty()), "");
-  static_assert(noexcept(std::span<int, 0>().empty()), "");
+int main() {
+  static_assert(noexcept(std::span<int>().empty()));
+  static_assert(noexcept(std::span<int, 0>().empty()));
 
-  static_assert(std::span<int>().empty(), "");
-  static_assert(std::span<long>().empty(), "");
-  static_assert(std::span<double>().empty(), "");
-  static_assert(std::span<A>().empty(), "");
-  static_assert(std::span<std::string>().empty(), "");
+  static_assert(std::span<int>().empty());
+  static_assert(std::span<long>().empty());
+  static_assert(std::span<double>().empty());
+  static_assert(std::span<A>().empty());
+  static_assert(std::span<std::string>().empty());
 
-  static_assert(std::span<int, 0>().empty(), "");
-  static_assert(std::span<long, 0>().empty(), "");
-  static_assert(std::span<double, 0>().empty(), "");
-  static_assert(std::span<A, 0>().empty(), "");
-  static_assert(std::span<std::string, 0>().empty(), "");
+  static_assert(std::span<int, 0>().empty());
+  static_assert(std::span<long, 0>().empty());
+  static_assert(std::span<double, 0>().empty());
+  static_assert(std::span<A, 0>().empty());
+  static_assert(std::span<std::string, 0>().empty());
 
-  static_assert(!std::span<const int>(iArr1, 1).empty(), "");
-  static_assert(!std::span<const int>(iArr1, 2).empty(), "");
-  static_assert(!std::span<const int>(iArr1, 3).empty(), "");
-  static_assert(!std::span<const int>(iArr1, 4).empty(), "");
-  static_assert(!std::span<const int>(iArr1, 5).empty(), "");
+  static_assert(!std::span<const int>(iArr1, 1).empty());
+  static_assert(!std::span<const int>(iArr1, 2).empty());
+  static_assert(!std::span<const int>(iArr1, 3).empty());
+  static_assert(!std::span<const int>(iArr1, 4).empty());
+  static_assert(!std::span<const int>(iArr1, 5).empty());
 
   assert((std::span<int>().empty()));
   assert((std::span<long>().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..b7ba14bc9023a 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
 
 // <span>
 
 // constexpr size_type size() const noexcept;
 //
+// Effects:
+//   - Equivalent to: return size_;
 
 #include <span>
 #include <cassert>
@@ -34,24 +37,24 @@ 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<int>(), 0), "");
-  static_assert(testConstexprSpan(std::span<long>(), 0), "");
-  static_assert(testConstexprSpan(std::span<double>(), 0), "");
-  static_assert(testConstexprSpan(std::span<A>(), 0), "");
-  static_assert(testConstexprSpan(std::span<std::string>(), 0), "");
-
-  static_assert(testConstexprSpan(std::span<int, 0>(), 0), "");
-  static_assert(testConstexprSpan(std::span<long, 0>(), 0), "");
-  static_assert(testConstexprSpan(std::span<double, 0>(), 0), "");
-  static_assert(testConstexprSpan(std::span<A, 0>(), 0), "");
-  static_assert(testConstexprSpan(std::span<std::string, 0>(), 0), "");
-
-  static_assert(testConstexprSpan(std::span<const int>(iArr1, 1), 1), "");
-  static_assert(testConstexprSpan(std::span<const int>(iArr1, 2), 2), "");
-  static_assert(testConstexprSpan(std::span<const int>(iArr1, 3), 3), "");
-  static_assert(testConstexprSpan(std::span<const int>(iArr1, 4), 4), "");
-  static_assert(testConstexprSpan(std::span<const int>(iArr1, 5), 5), "");
+int main() {
+  static_assert(testConstexprSpan(std::span<int>(), 0));
+  static_assert(testConstexprSpan(std::span<long>(), 0));
+  static_assert(testConstexprSpan(std::span<double>(), 0));
+  static_assert(testConstexprSpan(std::span<A>(), 0));
+  static_assert(testConstexprSpan(std::span<std::string>(), 0));
+
+  static_assert(testConstexprSpan(std::span<int, 0>(), 0));
+  static_assert(testConstexprSpan(std::span<long, 0>(), 0));
+  static_assert(testConstexprSpan(std::span<double, 0>(), 0));
+  static_assert(testConstexprSpan(std::span<A, 0>(), 0));
+  static_assert(testConstexprSpan(std::span<std::string, 0>(), 0));
+
+  static_assert(testConstexprSpan(std::span<const int>(iArr1, 1), 1));
+  static_assert(testConstexprSpan(std::span<const int>(iArr1, 2), 2));
+  static_assert(testConstexprSpan(std::span<const int>(iArr1, 3), 3));
+  static_assert(testConstexprSpan(std::span<const int>(iArr1, 4), 4));
+  static_assert(testConstexprSpan(std::span<const int>(iArr1, 5), 5));
 
   testRuntimeSpan(std::span<int>(), 0);
   testRuntimeSpan(std::span<long>(), 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..431b9bd3f4da5 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
 
 // <span>
 
 // constexpr size_type size_bytes() const noexcept;
 //
-//  Effects: Equivalent to: return size() * sizeof(element_type);
+// Effects:
+//   - Equivalent to: return size() * sizeof(element_type);
 
 #include <span>
 #include <cassert>
@@ -22,37 +24,37 @@
 template <typename Span>
 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 <typename Span>
 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 {};
 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<int>(), 0), "");
-  static_assert(testConstexprSpan(std::span<long>(), 0), "");
-  static_assert(testConstexprSpan(std::span<double>(), 0), "");
-  static_assert(testConstexprSpan(std::span<A>(), 0), "");
-  static_assert(testConstexprSpan(std::span<std::string>(), 0), "");
-
-  static_assert(testConstexprSpan(std::span<int, 0>(), 0), "");
-  static_assert(testConstexprSpan(std::span<long, 0>(), 0), "");
-  static_assert(testConstexprSpan(std::span<double, 0>(), 0), "");
-  static_assert(testConstexprSpan(std::span<A, 0>(), 0), "");
-  static_assert(testConstexprSpan(std::span<std::string, 0>(), 0), "");
-
-  static_assert(testConstexprSpan(std::span<const int>(iArr1, 1), 1), "");
-  static_assert(testConstexprSpan(std::span<const int>(iArr1, 2), 2), "");
-  static_assert(testConstexprSpan(std::span<const int>(iArr1, 3), 3), "");
-  static_assert(testConstexprSpan(std::span<const int>(iArr1, 4), 4), "");
-  static_assert(testConstexprSpan(std::span<const int>(iArr1, 5), 5), "");
+int main() {
+  static_assert(testConstexprSpan(std::span<int>(), 0));
+  static_assert(testConstexprSpan(std::span<long>(), 0));
+  static_assert(testConstexprSpan(std::span<double>(), 0));
+  static_assert(testConstexprSpan(std::span<A>(), 0));
+  static_assert(testConstexprSpan(std::span<std::string>(), 0));
+
+  static_assert(testConstexprSpan(std::span<int, 0>(), 0));
+  static_assert(testConstexprSpan(std::span<long, 0>(), 0));
+  static_assert(testConstexprSpan(std::span<double, 0>(), 0));
+  static_assert(testConstexprSpan(std::span<A, 0>(), 0));
+  static_assert(testConstexprSpan(std::span<std::string, 0>(), 0));
+
+  static_assert(testConstexprSpan(std::span<const int>(iArr1, 1), 1));
+  static_assert(testConstexprSpan(std::span<const int>(iArr1, 2), 2));
+  static_assert(testConstexprSpan(std::span<const int>(iArr1, 3), 3));
+  static_assert(testConstexprSpan(std::span<const int>(iArr1, 4), 4));
+  static_assert(testConstexprSpan(std::span<const int>(iArr1, 5), 5));
 
   testRuntimeSpan(std::span<int>(), 0);
   testRuntimeSpan(std::span<long>(), 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..c39cde5e2c2e6 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,30 @@
 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
 //
 //===----------------------------------------------------------------------===//
-// UNSUPPORTED: c++03, c++11, c++14, c++17
+
+// REQUIRES: std-at-least-c++20
 
 // <span>
 
 // template<class ElementType, size_t Extent = dynamic_extent>
 // class span {
 // public:
-//  // constants and types
-//  using element_type           = ElementType;
-//  using value_type             = remove_cv_t<ElementType>;
-//  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<iterator>;
-//  using const_reverse_iterator = std::reverse_iterator<const_iterator>;
-//
-//  static constexpr size_type extent = Extent;
-//
+//   // constants and types
+//   using element_type = ElementType;
+//   using value_type = remove_cv_t<ElementType>;
+//   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 const_iterator = implementation-defined;
+//   using reverse_iterator = std::reverse_iterator<iterator>;
+//   using const_reverse_iterator = std::reverse_iterator<const_iterator>;
+//   static constexpr size_type extent = Extent;
 
 #include <span>
-#include <cassert>
 #include <iterator>
 #include <string>
 
@@ -79,7 +77,7 @@ void test() {
 
 struct A {};
 
-int main(int, char**) {
+int main() {
   test<int>();
   test<long>();
   test<double>();

>From 8178a532493c97579b6e391172b1cf8e6969381d Mon Sep 17 00:00:00 2001
From: eiytoq <eiytoq at outlook.com>
Date: Mon, 8 Jun 2026 19:08:14 +0800
Subject: [PATCH 2/3] ci

---
 .../views/views.span/span.cons/array.pass.cpp | 34 +++++++++----------
 .../views.span/span.cons/stdarray.pass.cpp    |  8 ++---
 2 files changed, 21 insertions(+), 21 deletions(-)

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 cbc51f476c543..00d55f60ebd71 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
@@ -115,39 +115,39 @@ int main() {
 
   // Size wrong
   {
-    static_assert(!std::is_constructible_v<std::span<int, 2>, int(&)[3]>);
+    static_assert(!std::is_constructible_v<std::span<int, 2>, int (&)[3]>);
   }
 
   // Type wrong
   {
-    static_assert(!std::is_constructible_v<std::span<float>, int(&)[3]>);
-    static_assert(!std::is_constructible_v<std::span<float, 3>, int(&)[3]>);
+    static_assert(!std::is_constructible_v<std::span<float>, int (&)[3]>);
+    static_assert(!std::is_constructible_v<std::span<float, 3>, int (&)[3]>);
   }
 
   // CV wrong (dynamically sized)
   {
-    static_assert(!std::is_constructible_v<std::span<int>, const int(&)[3]>);
-    static_assert(!std::is_constructible_v<std::span<int>, volatile int(&)[3]>);
-    static_assert(!std::is_constructible_v<std::span<int>, const volatile int(&)[3]>);
+    static_assert(!std::is_constructible_v<std::span<int>, const int (&)[3]>);
+    static_assert(!std::is_constructible_v<std::span<int>, volatile int (&)[3]>);
+    static_assert(!std::is_constructible_v<std::span<int>, const volatile int (&)[3]>);
 
-    static_assert(!std::is_constructible_v<std::span<const int>, volatile int(&)[3]>);
-    static_assert(!std::is_constructible_v<std::span<const int>, const volatile int(&)[3]>);
+    static_assert(!std::is_constructible_v<std::span<const int>, volatile int (&)[3]>);
+    static_assert(!std::is_constructible_v<std::span<const int>, const volatile int (&)[3]>);
 
-    static_assert(!std::is_constructible_v<std::span<volatile int>, const int(&)[3]>);
-    static_assert(!std::is_constructible_v<std::span<volatile int>, const volatile int(&)[3]>);
+    static_assert(!std::is_constructible_v<std::span<volatile int>, const int (&)[3]>);
+    static_assert(!std::is_constructible_v<std::span<volatile int>, const volatile int (&)[3]>);
   }
 
   // CV wrong (statically sized)
   {
-    static_assert(!std::is_constructible_v<std::span<int, 3>, const int(&)[3]>);
-    static_assert(!std::is_constructible_v<std::span<int, 3>, volatile int(&)[3]>);
-    static_assert(!std::is_constructible_v<std::span<int, 3>, const volatile int(&)[3]>);
+    static_assert(!std::is_constructible_v<std::span<int, 3>, const int (&)[3]>);
+    static_assert(!std::is_constructible_v<std::span<int, 3>, volatile int (&)[3]>);
+    static_assert(!std::is_constructible_v<std::span<int, 3>, const volatile int (&)[3]>);
 
-    static_assert(!std::is_constructible_v<std::span<const int, 3>, volatile int(&)[3]>);
-    static_assert(!std::is_constructible_v<std::span<const int, 3>, const volatile int(&)[3]>);
+    static_assert(!std::is_constructible_v<std::span<const int, 3>, volatile int (&)[3]>);
+    static_assert(!std::is_constructible_v<std::span<const int, 3>, const volatile int (&)[3]>);
 
-    static_assert(!std::is_constructible_v<std::span<volatile int, 3>, const int(&)[3]>);
-    static_assert(!std::is_constructible_v<std::span<volatile int, 3>, const volatile int(&)[3]>);
+    static_assert(!std::is_constructible_v<std::span<volatile int, 3>, const int (&)[3]>);
+    static_assert(!std::is_constructible_v<std::span<volatile int, 3>, const volatile int (&)[3]>);
   }
 
   return 0;
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 9f218e5a26b78..472f8ac8de74f 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
@@ -50,10 +50,10 @@ void checkCV() {
 
   //  types different (static sized)
   {
-    std::span<const int, 3> s1{arr};           // a span<const int> 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<const volatile int, 3> s4{arr};  // a span<const volatile int> pointing at int.
+    std::span<const int, 3> s1{arr};          // a span<const int> 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<const volatile int, 3> s4{arr}; // a span<const volatile int> pointing at int.
   }
 }
 

>From c8b4060fd30699dee23d713531bcc060cb80823e Mon Sep 17 00:00:00 2001
From: eiytoq <eiytoq at outlook.com>
Date: Mon, 8 Jun 2026 20:52:04 +0800
Subject: [PATCH 3/3] fix

---
 .../std/containers/views/views.span/span.cons/array.pass.cpp    | 2 +-
 .../std/containers/views/views.span/span.cons/assign.pass.cpp   | 2 +-
 .../std/containers/views/views.span/span.cons/copy.pass.cpp     | 2 +-
 .../std/containers/views/views.span/span.cons/deduct.pass.cpp   | 2 +-
 .../std/containers/views/views.span/span.cons/default.pass.cpp  | 2 +-
 .../views/views.span/span.cons/initializer_list.pass.cpp        | 2 +-
 .../containers/views/views.span/span.cons/iterator_len.pass.cpp | 2 +-
 .../views/views.span/span.cons/iterator_sentinel.pass.cpp       | 2 +-
 .../std/containers/views/views.span/span.cons/range.pass.cpp    | 2 +-
 .../std/containers/views/views.span/span.cons/span.pass.cpp     | 2 +-
 .../std/containers/views/views.span/span.cons/span.verify.cpp   | 2 +-
 .../std/containers/views/views.span/span.cons/stdarray.pass.cpp | 2 +-
 .../std/containers/views/views.span/span.elem/back.pass.cpp     | 2 +-
 .../std/containers/views/views.span/span.elem/data.pass.cpp     | 2 +-
 .../containers/views/views.span/span.iterators/begin.pass.cpp   | 2 +-
 .../std/containers/views/views.span/span.iterators/end.pass.cpp | 2 +-
 .../views/views.span/span.iterators/iterator.pass.cpp           | 2 +-
 .../containers/views/views.span/span.iterators/rbegin.pass.cpp  | 2 +-
 .../containers/views/views.span/span.iterators/rend.pass.cpp    | 2 +-
 .../views/views.span/span.objectrep/as_bytes.pass.cpp           | 2 +-
 .../views/views.span/span.objectrep/as_writable_bytes.pass.cpp  | 2 +-
 .../std/containers/views/views.span/span.obs/empty.pass.cpp     | 2 +-
 .../test/std/containers/views/views.span/span.obs/size.pass.cpp | 2 +-
 .../containers/views/views.span/span.obs/size_bytes.pass.cpp    | 2 +-
 libcxx/test/std/containers/views/views.span/types.pass.cpp      | 2 +-
 25 files changed, 25 insertions(+), 25 deletions(-)

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 00d55f60ebd71..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
@@ -101,7 +101,7 @@ constexpr bool testSpan() {
 
 struct A {};
 
-int main() {
+int main(int, char**) {
   testSpan<int>();
   testSpan<double>();
   testSpan<A>();
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 4b313faac235b..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
@@ -33,7 +33,7 @@ constexpr int carr3[] = {7, 8};
 int arr[]             = {5, 6, 7, 9};
 std::string strs[]    = {"ABC", "DEF", "GHI"};
 
-int main() {
+int main(int, char**) {
   //  constexpr dynamically sized assignment
   {
     //  On systems where 'ptrdiff_t' is a synonym for 'int',
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 9716eb641ed8f..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
@@ -107,7 +107,7 @@ constexpr bool test_all() {
   return true;
 }
 
-int main() {
+int main(int, char**) {
   test_all();
   static_assert(test_all());
 
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 ce9e923cbf5f0..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
@@ -130,7 +130,7 @@ void test_range_std_container() {
   }
 }
 
-int main() {
+int main(int, char**) {
   test_iterator_sentinel();
   test_c_array();
   test_std_array();
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 4f3e6b4692786..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
@@ -57,7 +57,7 @@ void testRuntimeSpan() {
 
 struct A {};
 
-int main() {
+int main(int, char**) {
   static_assert(testConstexprSpan<int>());
   static_assert(testConstexprSpan<long>());
   static_assert(testConstexprSpan<double>());
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 4ef785e8002f6..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
@@ -59,7 +59,7 @@ bool test_P2447R4_annex_c_examples() {
   return true;
 }
 
-int main() {
+int main(int, char**) {
   assert(test());
   static_assert(test());
 
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 8a0b4c7ced2d4..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
@@ -62,7 +62,7 @@ constexpr bool test() {
   return true;
 }
 
-int main() {
+int main(int, char**) {
   test();
   static_assert(test());
 
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 49ae38038141d..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
@@ -142,7 +142,7 @@ void test_exceptions() {
 }
 #endif // TEST_HAS_NO_EXCEPTIONS
 
-int main() {
+int main(int, char**) {
   test();
 #ifndef TEST_HAS_NO_EXCEPTIONS
   test_exceptions();
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 6342510a9f7cf..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
@@ -80,7 +80,7 @@ static_assert(!std::is_convertible_v<BorrowedContiguousSizedRange&, std::span<ch
 static_assert(std::is_convertible_v<const BorrowedContiguousSizedRange&, std::span<const char>>);
 static_assert(!std::is_convertible_v<const BorrowedContiguousSizedRange&, std::span<const char, 3>>);
 
-int main() {
+int main(int, char**) {
   test();
   static_assert(test());
 
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 6c80d1af1334e..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
@@ -114,7 +114,7 @@ TEST_CONSTEXPR_CXX20 bool test() {
   return true;
 }
 
-int main() {
+int main(int, char**) {
   static_assert(test());
   test();
 
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 3c143f15a446e..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
@@ -108,7 +108,7 @@ void checkCV() {
   }
 }
 
-int main() {
+int main(int, char**) {
   std::span<int> sp;
   std::span<int, 0> sp0;
 
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 472f8ac8de74f..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
@@ -93,7 +93,7 @@ constexpr bool testConstructors() {
 
 struct A {};
 
-int main() {
+int main(int, char**) {
   assert(testConstructors<int>());
   assert(testConstructors<long>());
   assert(testConstructors<double>());
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 6aa3e799ac2ee..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
@@ -48,7 +48,7 @@ void testEmptySpan(Span sp) {
 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 main(int, char**) {
   static_assert(testConstexprSpan(std::span<const int>(iArr1, 1)));
   static_assert(testConstexprSpan(std::span<const int>(iArr1, 2)));
   static_assert(testConstexprSpan(std::span<const int>(iArr1, 3)));
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 46ba32cbd14c5..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
@@ -34,7 +34,7 @@ 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 main(int, char**) {
   //  dynamic size
   static_assert(testConstexprSpan(std::span<int>(), nullptr));
   static_assert(testConstexprSpan(std::span<long>(), nullptr));
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 782786234da75..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
@@ -51,7 +51,7 @@ bool operator==(A, A) { return true; }
 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 main(int, char**) {
   static_assert(testConstexprSpan(std::span<int>()));
   static_assert(testConstexprSpan(std::span<long>()));
   static_assert(testConstexprSpan(std::span<double>()));
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 9cce7c42966b7..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
@@ -55,7 +55,7 @@ bool operator==(A, A) { return true; }
 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 main(int, char**) {
   static_assert(testConstexprSpan(std::span<int>()));
   static_assert(testConstexprSpan(std::span<long>()));
   static_assert(testConstexprSpan(std::span<double>()));
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 d6c4f5c2425d1..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
@@ -84,7 +84,7 @@ constexpr bool test() {
   return true;
 }
 
-int main() {
+int main(int, char**) {
   test();
   static_assert(test());
 
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 130c5e6f812dc..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
@@ -51,7 +51,7 @@ bool operator==(A, A) { return true; }
 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 main(int, char**) {
   static_assert(testConstexprSpan(std::span<int>()));
   static_assert(testConstexprSpan(std::span<long>()));
   static_assert(testConstexprSpan(std::span<double>()));
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 c4082d5ef6c87..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
@@ -51,7 +51,7 @@ bool operator==(A, A) { return true; }
 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 main(int, char**) {
   static_assert(testConstexprSpan(std::span<int>()));
   static_assert(testConstexprSpan(std::span<long>()));
   static_assert(testConstexprSpan(std::span<double>()));
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 ee1f8d8bd5b6f..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
@@ -97,7 +97,7 @@ void test_constraints() {
   static_assert(!hasAsBytes<const volatile std::string, 0>);
 }
 
-int main() {
+int main(int, char**) {
   test_constraints();
 
   testRuntimeSpan(std::span<int>());
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 283fd98382a9c..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
@@ -97,7 +97,7 @@ void test_constraints() {
   static_assert(!hasAsWritableBytes<const volatile std::string, 0>);
 }
 
-int main() {
+int main(int, char**) {
   test_constraints();
 
   testRuntimeSpan(std::span<int>());
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 cabb1f04f17d0..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
@@ -25,7 +25,7 @@ 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 main(int, char**) {
   static_assert(noexcept(std::span<int>().empty()));
   static_assert(noexcept(std::span<int, 0>().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 b7ba14bc9023a..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
@@ -37,7 +37,7 @@ 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 main(int, char**) {
   static_assert(testConstexprSpan(std::span<int>(), 0));
   static_assert(testConstexprSpan(std::span<long>(), 0));
   static_assert(testConstexprSpan(std::span<double>(), 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 431b9bd3f4da5..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
@@ -37,7 +37,7 @@ 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 main(int, char**) {
   static_assert(testConstexprSpan(std::span<int>(), 0));
   static_assert(testConstexprSpan(std::span<long>(), 0));
   static_assert(testConstexprSpan(std::span<double>(), 0));
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 c39cde5e2c2e6..9a99c1639fee7 100644
--- a/libcxx/test/std/containers/views/views.span/types.pass.cpp
+++ b/libcxx/test/std/containers/views/views.span/types.pass.cpp
@@ -77,7 +77,7 @@ void test() {
 
 struct A {};
 
-int main() {
+int main(int, char**) {
   test<int>();
   test<long>();
   test<double>();



More information about the libcxx-commits mailing list