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
9// UNSUPPORTED: c++03, c++11, c++14, c++17
10
11// std::ranges::lazy_split_view::outer-iterator::value_type::end()
12
13#include <ranges>
14
15#include <cassert>
16#include "../types.h"
17
18constexpr bool test() {
19 // `View` is a forward range.
20 {
21 CopyableView input("a");
22
23 // Non-const.
24 {
25 SplitViewCopyable v(input, "b");
26 auto val = *v.begin();
27
28 static_assert(std::same_as<decltype(val.end()), std::default_sentinel_t>);
29 static_assert(noexcept(val.end()));
30 [[maybe_unused]] auto e = val.end();
31 }
32
33 // Const.
34 {
35 SplitViewCopyable v(input, "b");
36 const auto val = *v.begin();
37
38 static_assert(std::same_as<decltype(val.end()), std::default_sentinel_t>);
39 static_assert(noexcept(val.end()));
40 [[maybe_unused]] auto e = val.end();
41 }
42 }
43
44 // `View` is an input range.
45 {
46 InputView input("a");
47
48 // Non-const.
49 {
50 SplitViewInput v(input, 'b');
51 auto val = *v.begin();
52
53 static_assert(std::same_as<decltype(val.end()), std::default_sentinel_t>);
54 static_assert(noexcept(val.end()));
55 [[maybe_unused]] auto e = val.end();
56 }
57
58 // Const.
59 {
60 SplitViewInput v(input, 'b');
61 const auto val = *v.begin();
62
63 static_assert(std::same_as<decltype(val.end()), std::default_sentinel_t>);
64 static_assert(noexcept(val.end()));
65 [[maybe_unused]] auto e = val.end();
66 }
67 }
68
69 return true;
70}
71
72int main(int, char**) {
73 assert(test());
74 static_assert(test());
75
76 return 0;
77}
78

source code of libcxx/test/std/ranges/range.adaptors/range.lazy.split/range.lazy.split.outer.value/end.pass.cpp