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 
9*a8cf78c7SLouis Dionne // UNSUPPORTED: c++03, c++11, c++14, c++17
10*a8cf78c7SLouis Dionne // UNSUPPORTED: libcpp-has-no-incomplete-ranges
11*a8cf78c7SLouis Dionne 
12*a8cf78c7SLouis Dionne // span
13*a8cf78c7SLouis Dionne 
14*a8cf78c7SLouis Dionne #include <span>
15*a8cf78c7SLouis Dionne 
16*a8cf78c7SLouis Dionne #include <concepts>
17*a8cf78c7SLouis Dionne #include <ranges>
18*a8cf78c7SLouis Dionne 
19*a8cf78c7SLouis Dionne using range = std::span<int>;
20*a8cf78c7SLouis Dionne 
21*a8cf78c7SLouis Dionne 
22*a8cf78c7SLouis Dionne static_assert(std::same_as<std::ranges::iterator_t<range>, range::iterator>);
23*a8cf78c7SLouis Dionne static_assert(std::ranges::common_range<range>);
24*a8cf78c7SLouis Dionne static_assert(std::ranges::random_access_range<range>);
25*a8cf78c7SLouis Dionne static_assert(std::ranges::contiguous_range<range>);
26*a8cf78c7SLouis Dionne static_assert(std::ranges::view<range> && std::ranges::enable_view<range>);
27*a8cf78c7SLouis Dionne static_assert(std::ranges::sized_range<range>);
28*a8cf78c7SLouis Dionne static_assert(std::ranges::borrowed_range<range>);
29*a8cf78c7SLouis Dionne static_assert(std::ranges::viewable_range<range>);
30*a8cf78c7SLouis Dionne 
31*a8cf78c7SLouis Dionne static_assert(std::same_as<std::ranges::iterator_t<range const>, range::iterator>);
32*a8cf78c7SLouis Dionne static_assert(std::ranges::common_range<range const>);
33*a8cf78c7SLouis Dionne static_assert(std::ranges::random_access_range<range const>);
34*a8cf78c7SLouis Dionne static_assert(std::ranges::contiguous_range<range const>);
35*a8cf78c7SLouis Dionne static_assert(!std::ranges::view<range const> && !std::ranges::enable_view<range const>);
36*a8cf78c7SLouis Dionne static_assert(std::ranges::sized_range<range const>);
37*a8cf78c7SLouis Dionne static_assert(std::ranges::borrowed_range<range const>);
38*a8cf78c7SLouis Dionne static_assert(std::ranges::viewable_range<range const>);
39