1*e53c461bSKonstantin Varlamov //===----------------------------------------------------------------------===//
2*e53c461bSKonstantin Varlamov //
3*e53c461bSKonstantin Varlamov // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*e53c461bSKonstantin Varlamov // See https://llvm.org/LICENSE.txt for license information.
5*e53c461bSKonstantin Varlamov // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*e53c461bSKonstantin Varlamov //
7*e53c461bSKonstantin Varlamov //===----------------------------------------------------------------------===//
8*e53c461bSKonstantin Varlamov
9*e53c461bSKonstantin Varlamov // UNSUPPORTED: c++03, c++11, c++14, c++17
10*e53c461bSKonstantin Varlamov
11*e53c461bSKonstantin Varlamov // class std::ranges::lazy_split_view::outer-iterator::value_type;
12*e53c461bSKonstantin Varlamov
13*e53c461bSKonstantin Varlamov #include <ranges>
14*e53c461bSKonstantin Varlamov
15*e53c461bSKonstantin Varlamov #include <cassert>
16*e53c461bSKonstantin Varlamov #include <concepts>
17*e53c461bSKonstantin Varlamov #include "../types.h"
18*e53c461bSKonstantin Varlamov
19*e53c461bSKonstantin Varlamov using V = ValueTypeForward;
20*e53c461bSKonstantin Varlamov static_assert(std::ranges::forward_range<V>);
21*e53c461bSKonstantin Varlamov static_assert(std::ranges::view<V>);
22*e53c461bSKonstantin Varlamov
23*e53c461bSKonstantin Varlamov static_assert(std::is_base_of_v<std::ranges::view_interface<ValueTypeForward>, ValueTypeForward>);
24*e53c461bSKonstantin Varlamov
test()25*e53c461bSKonstantin Varlamov constexpr bool test() {
26*e53c461bSKonstantin Varlamov // empty()
27*e53c461bSKonstantin Varlamov {
28*e53c461bSKonstantin Varlamov {
29*e53c461bSKonstantin Varlamov SplitViewForward v("abc def", " ");
30*e53c461bSKonstantin Varlamov auto val = *v.begin();
31*e53c461bSKonstantin Varlamov assert(!val.empty());
32*e53c461bSKonstantin Varlamov }
33*e53c461bSKonstantin Varlamov
34*e53c461bSKonstantin Varlamov {
35*e53c461bSKonstantin Varlamov SplitViewForward v;
36*e53c461bSKonstantin Varlamov auto val = *v.begin();
37*e53c461bSKonstantin Varlamov assert(val.empty());
38*e53c461bSKonstantin Varlamov }
39*e53c461bSKonstantin Varlamov }
40*e53c461bSKonstantin Varlamov
41*e53c461bSKonstantin Varlamov // operator bool()
42*e53c461bSKonstantin Varlamov {
43*e53c461bSKonstantin Varlamov {
44*e53c461bSKonstantin Varlamov SplitViewForward v("abc def", " ");
45*e53c461bSKonstantin Varlamov auto val = *v.begin();
46*e53c461bSKonstantin Varlamov assert(val);
47*e53c461bSKonstantin Varlamov }
48*e53c461bSKonstantin Varlamov
49*e53c461bSKonstantin Varlamov {
50*e53c461bSKonstantin Varlamov SplitViewForward v;
51*e53c461bSKonstantin Varlamov auto val = *v.begin();
52*e53c461bSKonstantin Varlamov assert(!val);
53*e53c461bSKonstantin Varlamov }
54*e53c461bSKonstantin Varlamov }
55*e53c461bSKonstantin Varlamov
56*e53c461bSKonstantin Varlamov // front()
57*e53c461bSKonstantin Varlamov {
58*e53c461bSKonstantin Varlamov SplitViewForward v("abc def", " ");
59*e53c461bSKonstantin Varlamov auto val = *v.begin();
60*e53c461bSKonstantin Varlamov assert(val.front() == 'a');
61*e53c461bSKonstantin Varlamov }
62*e53c461bSKonstantin Varlamov
63*e53c461bSKonstantin Varlamov return true;
64*e53c461bSKonstantin Varlamov }
65*e53c461bSKonstantin Varlamov
main(int,char **)66*e53c461bSKonstantin Varlamov int main(int, char**) {
67*e53c461bSKonstantin Varlamov test();
68*e53c461bSKonstantin Varlamov static_assert(test());
69*e53c461bSKonstantin Varlamov
70*e53c461bSKonstantin Varlamov return 0;
71*e53c461bSKonstantin Varlamov }
72