14#ifndef RANGES_V3_RANGE_TRAITS_HPP
15#define RANGES_V3_RANGE_TRAITS_HPP
29#include <range/v3/detail/prologue.hpp>
36 template<
typename I,
typename S>
37 using common_iterator_impl_t =
38 enable_if_t<(bool)(input_or_output_iterator<I> && sentinel_for<S, I>),
39 common_iterator<I, S>>;
45 template<
typename I,
typename S>
47 detail::common_iterator_impl_t<I, S>>;
52 template<
typename I,
typename S>
53 using cpp17_iterator_t =
55 common_iterator_t<I, S>, cpp17_iterator<common_iterator_t<I, S>>>;
60 template<
typename Rng>
61 using range_difference_t = iter_difference_t<iterator_t<Rng>>;
63 template<
typename Rng>
64 using range_value_t = iter_value_t<iterator_t<Rng>>;
66 template<
typename Rng>
67 using range_reference_t = iter_reference_t<iterator_t<Rng>>;
69 template<
typename Rng>
70 using range_rvalue_reference_t = iter_rvalue_reference_t<iterator_t<Rng>>;
72 template<
typename Rng>
73 using range_common_reference_t = iter_common_reference_t<iterator_t<Rng>>;
75 template<
typename Rng>
76 using range_size_t =
decltype(ranges::size(std::declval<Rng &>()));
79 template<
typename Rng>
80 using range_difference_type_t RANGES_DEPRECATED(
81 "range_difference_type_t is deprecated. Use the range_difference_t instead.") =
82 iter_difference_t<iterator_t<Rng>>;
84 template<
typename Rng>
85 using range_value_type_t RANGES_DEPRECATED(
86 "range_value_type_t is deprecated. Use the range_value_t instead.") =
87 iter_value_t<iterator_t<Rng>>;
89 template<
typename Rng>
90 using range_category_t RANGES_DEPRECATED(
91 "range_category_t is deprecated. Use the range concepts instead.") =
94 template<
typename Rng>
95 using range_size_type_t RANGES_DEPRECATED(
96 "range_size_type_t is deprecated. Use range_size_t instead.") =
97 detail::iter_size_t<iterator_t<Rng>>;
100 template<
typename Rng>
101 using range_common_iterator_t = common_iterator_t<iterator_t<Rng>, sentinel_t<Rng>>;
106 template<
typename Rng>
107 using range_cpp17_iterator_t = cpp17_iterator_t<iterator_t<Rng>, sentinel_t<Rng>>;
109 std::integral_constant<cardinality, finite> test_cardinality(
void *);
110 template<cardinality Card>
111 std::integral_constant<cardinality, Card> test_cardinality(basic_view<Card> *);
112 template<
typename T, std::
size_t N>
113 std::integral_constant<cardinality, static_cast<cardinality>(N)> test_cardinality(
115 template<
typename T, std::
size_t N>
116 std::integral_constant<cardinality, static_cast<cardinality>(N)> test_cardinality(
122 template<
typename Rng,
typename Void >
125 decltype(detail::test_cardinality(
126 static_cast<uncvref_t<Rng> *>(nullptr))),
127 range_cardinality<uncvref_t<Rng>>>
133 using ranges::range_difference_t;
134 using ranges::range_reference_t;
135 using ranges::range_rvalue_reference_t;
136 using ranges::range_value_t;
140#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 traits.hpp:128