|
19 | 19 |
|
20 | 20 | #include <algorithm> |
21 | 21 | #include <array> |
| 22 | +#include <cassert> |
22 | 23 | #include <ranges> |
23 | 24 | #include <iterator> |
24 | 25 |
|
25 | 26 | #include "almost_satisfies_types.h" |
26 | 27 | #include "test_iterators.h" |
27 | 28 | #include "MoveOnly.h" |
28 | 29 |
|
29 | | -template <class Iter, class Sent = Iter, class Count = std::size_t> |
30 | | -concept HasShiftLeftIt = requires(Iter iter, Sent sent, Count n) { std::ranges::shift_left(iter, sent, n); }; |
| 30 | +template <class Iter, class Sent = Iter> |
| 31 | +concept HasShiftLeftIt = requires(Iter iter, Sent sent, std::size_t n) { std::ranges::shift_left(iter, sent, n); }; |
31 | 32 |
|
32 | 33 | static_assert(HasShiftLeftIt<int*>); |
33 | 34 | static_assert(!HasShiftLeftIt<ForwardIteratorNotDerivedFrom>); |
34 | 35 | static_assert(!HasShiftLeftIt<PermutableNotForwardIterator>); |
35 | 36 | static_assert(!HasShiftLeftIt<PermutableNotSwappable>); |
36 | 37 |
|
37 | | -template <class Range, class Count = std::size_t> |
38 | | -concept HasShiftLeftR = requires(Range range, Count n) { std::ranges::shift_left(range, n); }; |
| 38 | +template <class Range> |
| 39 | +concept HasShiftLeftR = requires(Range range, std::size_t n) { std::ranges::shift_left(range, n); }; |
39 | 40 |
|
40 | 41 | static_assert(HasShiftLeftR<UncheckedRange<int*>>); |
41 | 42 | static_assert(!HasShiftLeftR<ForwardRangeNotDerivedFrom>); |
@@ -170,25 +171,17 @@ constexpr void test_iter_sent() { |
170 | 171 | } |
171 | 172 | } |
172 | 173 |
|
173 | | -template <class Iter> |
174 | | -constexpr void test_iter() { |
175 | | - test_iter_sent<Iter, Iter>(); |
176 | | - test_iter_sent<Iter, sentinel_wrapper<Iter>>(); |
177 | | - test_iter_sent<Iter, sized_sentinel<Iter>>(); |
178 | | -} |
179 | | - |
180 | 174 | constexpr bool test() { |
181 | | - test_iter<forward_iterator<int*>>(); |
182 | | - test_iter<bidirectional_iterator<int*>>(); |
183 | | - test_iter<random_access_iterator<int*>>(); |
184 | | - test_iter<contiguous_iterator<int*>>(); |
185 | | - test_iter<int*>(); |
| 175 | + types::for_each(types::forward_iterator_list<int*>{}, []<class Iter> { |
| 176 | + test_iter_sent<Iter, Iter>(); |
| 177 | + test_iter_sent<Iter, sentinel_wrapper<Iter>>(); |
| 178 | + test_iter_sent<Iter, sized_sentinel<Iter>>(); |
| 179 | + }); |
186 | 180 | return true; |
187 | 181 | } |
188 | 182 |
|
189 | 183 | int main(int, char**) { |
190 | 184 | test(); |
191 | 185 | static_assert(test()); |
192 | | - |
193 | 186 | return 0; |
194 | 187 | } |
0 commit comments