[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