1//===----------------------------------------------------------------------===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8// UNSUPPORTED: c++03, c++11, c++14, c++17
9
10// <span>
11
12// constexpr span(const span& other) noexcept = default;
13
14#include <span>
15#include <cassert>
16#include <string>
17
18#include "test_macros.h"
19
20template <typename T>
21constexpr bool doCopy(const T &rhs)
22{
23 ASSERT_NOEXCEPT(T{rhs});
24 T lhs{rhs};
25 return lhs.data() == rhs.data()
26 && lhs.size() == rhs.size();
27}
28
29struct A{};
30
31template <typename T>
32void testCV ()
33{
34 int arr[] = {1,2,3};
35 assert((doCopy(std::span<T> () )));
36 assert((doCopy(std::span<T,0>() )));
37 assert((doCopy(std::span<T> (&arr[0], 1))));
38 assert((doCopy(std::span<T,1>(&arr[0], 1))));
39 assert((doCopy(std::span<T> (&arr[0], 2))));
40 assert((doCopy(std::span<T,2>(&arr[0], 2))));
41}
42
43
44int main(int, char**)
45{
46 constexpr int carr[] = {1,2,3};
47
48 static_assert(doCopy(std::span< int> ()), "");
49 static_assert(doCopy(std::span< int,0>()), "");
50 static_assert(doCopy(std::span<const int> (&carr[0], 1)), "");
51 static_assert(doCopy(std::span<const int,1>(&carr[0], 1)), "");
52 static_assert(doCopy(std::span<const int> (&carr[0], 2)), "");
53 static_assert(doCopy(std::span<const int,2>(&carr[0], 2)), "");
54
55 static_assert(doCopy(std::span<long>()), "");
56 static_assert(doCopy(std::span<double>()), "");
57 static_assert(doCopy(std::span<A>()), "");
58
59 std::string s;
60 assert(doCopy(std::span<std::string> () ));
61 assert(doCopy(std::span<std::string, 0>() ));
62 assert(doCopy(std::span<std::string> (&s, 1)));
63 assert(doCopy(std::span<std::string, 1>(&s, 1)));
64
65 testCV< int>();
66 testCV<const int>();
67 testCV< volatile int>();
68 testCV<const volatile int>();
69
70 return 0;
71}
72

source code of libcxx/test/std/containers/views/views.span/span.cons/copy.pass.cpp