25 using trait_type = std::iterator_traits<IterT>;
29 using value_type =
typename trait_type::value_type;
30 using reference =
typename trait_type::reference;
31 using iterator = IterT;
32 using difference_type =
typename trait_type::difference_type;
34 iterator_range(IterT left, IterT right):
53 iterator_range operator++(
int)
requires std::incrementable<IterT> {
54 return iterator_range { left++, right };
57 iterator_range& operator--()
requires std::incrementable<IterT> {
62 iterator_range operator--(
int)
requires std::incrementable<IterT> {
63 return iterator_range { left--, right };
68 using iter = mapped_iterator<IterT, F>;
69 return iterator_range<iter> {
76 return map([](
auto pair) {
return pair.first; });
80 return map([](
auto pair) {
return pair.second; });