14#ifndef RANGES_V3_ITERATOR_TRAITS_HPP
15#define RANGES_V3_ITERATOR_TRAITS_HPP
29#include <range/v3/detail/prologue.hpp>
37 using input_iterator_tag RANGES_DEPRECATED(
38 "Please switch to the standard iterator tags") = std::input_iterator_tag;
39 using forward_iterator_tag RANGES_DEPRECATED(
40 "Please switch to the standard iterator tags") = std::forward_iterator_tag;
41 using bidirectional_iterator_tag RANGES_DEPRECATED(
42 "Please switch to the standard iterator tags") = std::bidirectional_iterator_tag;
43 using random_access_iterator_tag RANGES_DEPRECATED(
44 "Please switch to the standard iterator tags") = std::random_access_iterator_tag;
53 template<
typename I,
typename = iter_reference_t<I>,
54 typename R = decltype(iter_move(std::declval<I &>())),
typename = R &>
55 using iter_rvalue_reference_t = R;
58 RANGES_INLINE_VAR
constexpr bool has_nothrow_iter_move_v =
59 noexcept(iter_rvalue_reference_t<I>(ranges::iter_move(std::declval<I &>())));
64 using iter_rvalue_reference_t = detail::iter_rvalue_reference_t<I>;
67 using iter_common_reference_t =
68 common_reference_t<iter_reference_t<I>, iter_value_t<I> &>;
70#if defined(RANGES_DEEP_STL_INTEGRATION) && RANGES_DEEP_STL_INTEGRATION && \
71 !defined(RANGES_DOXYGEN_INVOKED)
73 using iter_difference_t =
75 std::iterator_traits<uncvref_t<T>>,
76 incrementable_traits<uncvref_t<T>>>::difference_type;
79 using iter_difference_t =
80 typename incrementable_traits<uncvref_t<T>>::difference_type;
101 std::make_unsigned<iter_difference_t<I>>,
105 using iter_arrow_t =
decltype(std::declval<I &>().operator->());
108 using iter_pointer_t =
110 meta::is_trait<meta::defer<iter_arrow_t, I>>::value,
112 std::add_pointer<iter_reference_t<I>>>>;
115 struct difference_type_ :
meta::defer<iter_difference_t, T>
128 using difference_type_t RANGES_DEPRECATED(
129 "ranges::difference_type_t is deprecated. Please use "
130 "ranges::iter_difference_t instead.") = iter_difference_t<T>;
133 using value_type_t RANGES_DEPRECATED(
134 "ranges::value_type_t is deprecated. Please use "
135 "ranges::iter_value_t instead.") = iter_value_t<T>;
138 using reference_t RANGES_DEPRECATED(
139 "ranges::reference_t is deprecated. Use ranges::iter_reference_t "
140 "instead.") = iter_reference_t<R>;
143 using rvalue_reference_t RANGES_DEPRECATED(
144 "rvalue_reference_t is deprecated; "
145 "use iter_rvalue_reference_t instead") = iter_rvalue_reference_t<I>;
148 struct RANGES_DEPRECATED(
149 "ranges::size_type is deprecated. Iterators do not have an associated "
150 "size_type.") size_type : detail::size_type_<T>
154 using size_type_t RANGES_DEPRECATED(
"size_type_t is deprecated.") =
155 detail::iter_size_t<I>;
160 using ranges::iter_common_reference_t;
161 using ranges::iter_difference_t;
162 using ranges::iter_reference_t;
163 using ranges::iter_rvalue_reference_t;
164 using ranges::iter_value_t;
167 using ranges::disable_sized_sentinel;
176#include <range/v3/detail/epilogue.hpp>
typename T::type _t
Type alias for T::type.
Definition meta.hpp:141
typename detail::_cond< If >::template invoke< Then, Else > conditional_t
Select one type or another depending on a compile-time Boolean.
Definition meta.hpp:1148
Definition associated_types.hpp:166
Definition associated_types.hpp:236