11
11
// constexpr auto begin() requires (!simple-view<V>);
12
12
// constexpr auto begin() const requires range<const V>;
13
13
14
- #include < ranges>
15
14
#include < cassert>
15
+ #include < ranges>
16
16
#include < utility>
17
17
18
- #include " __ranges/concepts.h"
19
18
#include " test_macros.h"
20
19
#include " test_iterators.h"
21
20
#include " test_range.h"
@@ -29,100 +28,101 @@ struct NonCommonSimpleView : std::ranges::view_base {
29
28
static_assert (std::ranges::sized_range<NonCommonSimpleView>);
30
29
static_assert (!std::ranges::sized_range<const NonCommonSimpleView>);
31
30
31
+ using CommonInputIterPtrConstInt = common_input_iterator<const int *>;
32
+ using CountedCommonInputIterPtrConstInt = std::counted_iterator<CommonInputIterPtrConstInt>;
33
+
32
34
constexpr bool test () {
33
35
int buffer[8 ] = {1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 };
34
36
35
37
// simple-view<V> && sized_range<V> && random_access_range<V>
36
38
{
37
- static_assert (simple_view<SizedRandomAccessView>);
38
- static_assert (std::ranges::sized_range<SizedRandomAccessView>);
39
- static_assert (std::ranges::random_access_range<SizedRandomAccessView>);
39
+ using ViewTested = SizedRandomAccessView;
40
+ static_assert (simple_view<ViewTested>);
41
+ static_assert (std::ranges::sized_range<ViewTested>);
42
+ static_assert (std::ranges::random_access_range<ViewTested>);
40
43
41
- std::ranges::take_view<SizedRandomAccessView > tv (SizedRandomAccessView (buffer), 4 );
42
- assert (tv.begin () == SizedRandomAccessView (buffer).begin ());
44
+ std::ranges::take_view<ViewTested > tv (ViewTested (buffer), 4 );
45
+ assert (tv.begin () == ViewTested (buffer).begin ());
43
46
ASSERT_SAME_TYPE (decltype (tv.begin ()), RandomAccessIter);
44
- }
45
47
46
- {
47
- const std::ranges::take_view<SizedRandomAccessView> tv (SizedRandomAccessView (buffer), 4 );
48
- assert (tv.begin () == SizedRandomAccessView (buffer).begin ());
49
- ASSERT_SAME_TYPE (decltype (tv.begin ()), RandomAccessIter);
48
+ const std::ranges::take_view<ViewTested> ctv (ViewTested (buffer), 4 );
49
+ assert (ctv.begin () == ViewTested (buffer).begin ());
50
+ ASSERT_SAME_TYPE (decltype (ctv.begin ()), RandomAccessIter);
50
51
}
51
52
52
53
// simple-view<V> && sized_range<V> && !random_access_range<V>
53
54
{
54
- static_assert (simple_view<SizedForwardView>);
55
- static_assert (std::ranges::sized_range<SizedForwardView>);
56
- static_assert (!std::ranges::random_access_range<SizedForwardView>);
55
+ using ViewTested = SizedForwardView;
56
+ static_assert (simple_view<ViewTested>);
57
+ static_assert (std::ranges::sized_range<ViewTested>);
58
+ static_assert (!std::ranges::random_access_range<ViewTested>);
57
59
58
- std::ranges::take_view<SizedForwardView > tv (SizedForwardView {buffer}, 16 ); // underlying size is 8
60
+ std::ranges::take_view<ViewTested > tv (ViewTested {buffer}, 16 ); // underlying size is 8
59
61
assert (tv.begin () == std::counted_iterator<ForwardIter>(ForwardIter (buffer), 8 )); // expect min(8, 16)
60
62
ASSERT_SAME_TYPE (decltype (tv.begin ()), std::counted_iterator<ForwardIter>);
61
- }
62
63
63
- {
64
- const std::ranges::take_view<SizedForwardView> tv (SizedForwardView{buffer}, 4 );
65
- assert (tv.begin () == std::counted_iterator<ForwardIter>(ForwardIter (buffer), 4 ));
66
- ASSERT_SAME_TYPE (decltype (tv.begin ()), std::counted_iterator<ForwardIter>);
64
+ const std::ranges::take_view<ViewTested> ctv (ViewTested{buffer}, 4 );
65
+ assert (ctv.begin () == std::counted_iterator<ForwardIter>(ForwardIter (buffer), 4 ));
66
+ ASSERT_SAME_TYPE (decltype (ctv.begin ()), std::counted_iterator<ForwardIter>);
67
67
}
68
68
69
69
// simple-view<V> && !sized_range<V>
70
70
{
71
- static_assert (simple_view< MoveOnlyView>) ;
72
- static_assert (simple_view<MoveOnlyView >);
73
- std::ranges::take_view<MoveOnlyView > tv (MoveOnlyView {buffer}, 4 );
71
+ using ViewTested = MoveOnlyView;
72
+ static_assert (simple_view<ViewTested >);
73
+ std::ranges::take_view<ViewTested > tv (ViewTested {buffer}, 4 );
74
74
assert (tv.begin () == std::counted_iterator<int *>(buffer, 4 ));
75
75
ASSERT_SAME_TYPE (decltype (tv.begin ()), std::counted_iterator<int *>);
76
- }
77
76
78
- {
79
- const std::ranges::take_view<MoveOnlyView> tv (MoveOnlyView{buffer}, 4 );
80
- assert (tv.begin () == std::counted_iterator<int *>(buffer, 4 ));
81
- ASSERT_SAME_TYPE (decltype (tv.begin ()), std::counted_iterator<int *>);
77
+ const std::ranges::take_view<ViewTested> ctv (ViewTested{buffer}, 4 );
78
+ assert (ctv.begin () == std::counted_iterator<int *>(buffer, 4 ));
79
+ ASSERT_SAME_TYPE (decltype (ctv.begin ()), std::counted_iterator<int *>);
82
80
}
83
81
84
82
// simple-view<V> && sized_range<V> && !sized_range<const V>
85
83
{
86
- static_assert (simple_view<NonCommonSimpleView>);
87
- static_assert (std::ranges::sized_range<NonCommonSimpleView>);
88
- static_assert (!std::ranges::sized_range<const NonCommonSimpleView>);
84
+ using ViewTested = NonCommonSimpleView;
85
+ static_assert (simple_view<ViewTested>);
86
+ static_assert (std::ranges::sized_range<ViewTested>);
87
+ static_assert (!std::ranges::sized_range<const ViewTested>);
89
88
90
- std::ranges::take_view<NonCommonSimpleView > tv{};
89
+ std::ranges::take_view<ViewTested > tv{};
91
90
ASSERT_SAME_TYPE (decltype (tv.begin ()), std::counted_iterator<int *>);
92
91
ASSERT_SAME_TYPE (decltype (std::as_const (tv).begin ()), std::counted_iterator<int *>);
93
92
}
94
93
95
- // non simple-view<V> && !sized_range<V>
94
+ // ! simple-view<V> && !sized_range<V>
96
95
{
97
- static_assert (!simple_view<NonSimpleNonSizedView>);
98
- static_assert (!std::ranges::sized_range<NonSimpleNonSizedView>);
96
+ using ViewTested = NonSimpleNonSizedView;
97
+ static_assert (!simple_view<ViewTested>);
98
+ static_assert (!std::ranges::sized_range<ViewTested>);
99
99
100
- std::ranges::take_view<NonSimpleNonSizedView > tv{NonSimpleNonSizedView {buffer, buffer + 2 }, 4 };
100
+ std::ranges::take_view<ViewTested > tv{ViewTested {buffer, buffer + 2 }, 4 };
101
101
// The count for the counted iterator is the count of the take_view (i.e., 4)
102
- assert (tv.begin () ==
103
- std::counted_iterator<common_input_iterator<const int *>>(common_input_iterator<const int *>(buffer), 4 ));
104
- ASSERT_SAME_TYPE (decltype (tv.begin ()), std::counted_iterator<common_input_iterator<const int *>>);
102
+ assert (tv.begin () == CountedCommonInputIterPtrConstInt (CommonInputIterPtrConstInt (buffer), 4 ));
103
+ ASSERT_SAME_TYPE (decltype (tv.begin ()), CountedCommonInputIterPtrConstInt);
105
104
}
106
105
107
- // non simple-view<V> && sized_range<V>
106
+ // ! simple-view<V> && sized_range<V>
108
107
{
109
- static_assert (!simple_view<NonSimpleSizedView>);
110
- static_assert (std::ranges::sized_range<NonSimpleSizedView>);
108
+ using ViewTested = NonSimpleSizedView;
109
+ static_assert (!simple_view<ViewTested>);
110
+ static_assert (std::ranges::sized_range<ViewTested>);
111
111
112
- std::ranges::take_view<NonSimpleSizedView > tv{NonSimpleSizedView {buffer, buffer + 2 }, 4 };
112
+ std::ranges::take_view<ViewTested > tv{ViewTested {buffer, buffer + 2 }, 4 };
113
113
// The count for the counted iterator is the min(2, 4) (i.e., 2).
114
- assert (tv.begin () ==
115
- std::counted_iterator<common_input_iterator<const int *>>(common_input_iterator<const int *>(buffer), 2 ));
116
- ASSERT_SAME_TYPE (decltype (tv.begin ()), std::counted_iterator<common_input_iterator<const int *>>);
114
+ assert (tv.begin () == CountedCommonInputIterPtrConstInt (CommonInputIterPtrConstInt (buffer), 2 ));
115
+ ASSERT_SAME_TYPE (decltype (tv.begin ()), CountedCommonInputIterPtrConstInt);
117
116
}
118
117
119
- // non simple-view<V> && sized_range<V> && random_access_range<V>
118
+ // ! simple-view<V> && sized_range<V> && random_access_range<V>
120
119
{
121
- static_assert (!simple_view<NonSimpleSizedRandomView>);
122
- static_assert (std::ranges::sized_range<NonSimpleSizedRandomView>);
123
- static_assert (std::ranges::random_access_range<NonSimpleSizedRandomView>);
120
+ using ViewTested = NonSimpleSizedRandomView;
121
+ static_assert (!simple_view<ViewTested>);
122
+ static_assert (std::ranges::sized_range<ViewTested>);
123
+ static_assert (std::ranges::random_access_range<ViewTested>);
124
124
125
- std::ranges::take_view<NonSimpleSizedRandomView > tv{NonSimpleSizedRandomView {buffer, buffer + 2 }, 4 };
125
+ std::ranges::take_view<ViewTested > tv{ViewTested {buffer, buffer + 2 }, 4 };
126
126
assert (tv.begin () == random_access_iterator<const int *>(buffer));
127
127
ASSERT_SAME_TYPE (decltype (tv.begin ()), random_access_iterator<const int *>);
128
128
}
0 commit comments