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