13#ifndef RANGES_V3_ALGORITHM_EQUAL_HPP
14#define RANGES_V3_ALGORITHM_EQUAL_HPP
29#include <range/v3/utility/static_const.hpp>
31#include <range/v3/detail/prologue.hpp>
41 template<
typename I0,
typename S0,
typename I1,
typename S1,
typename C,
42 typename P0,
typename P1>
43 constexpr bool equal_nocheck(I0 begin0, S0 end0, I1 begin1, S1 end1, C pred,
46 for(; begin0 != end0 && begin1 != end1; ++begin0, ++begin1)
49 return begin0 == end0 && begin1 == end1;
54 RANGES_FUNC_BEGIN(equal)
66 "Use the
variant of ranges::equal that takes an upper bound for "
68 constexpr
bool RANGES_FUNC(equal)(I0 begin0,
75 for(; begin0 != end0; ++begin0, ++begin1)
87 typename P0 = identity,
88 typename P1 = identity)(
89 requires input_iterator<I0> AND sentinel_for<S0, I0> AND
90 input_iterator<I1> AND sentinel_for<S1, I1> AND
91 indirectly_comparable<I0, I1, C, P0, P1>)
92 constexpr bool RANGES_FUNC(equal)(I0 begin0,
100 if(RANGES_CONSTEXPR_IF(sized_sentinel_for<S0, I0> &&
101 sized_sentinel_for<S1, I1>))
102 if(distance(begin0, end0) != distance(begin1, end1))
104 return detail::equal_nocheck(std::move(begin0),
114 template(
typename Rng0,
117 typename P0 = identity,
118 typename P1 = identity)(
119 requires input_range<Rng0> AND input_iterator<uncvref_t<I1Ref>> AND
120 indirectly_comparable<iterator_t<Rng0>, uncvref_t<I1Ref>, C, P0, P1>)
122 "Use the variant of ranges::equal that takes an upper bound for "
124 constexpr
bool RANGES_FUNC(equal)(Rng0 && rng0,
130 RANGES_DIAGNOSTIC_PUSH
131 RANGES_DIAGNOSTIC_IGNORE_DEPRECATED_DECLARATIONS
132 return (*
this)(begin(rng0),
138 RANGES_DIAGNOSTIC_POP
142 template(
typename Rng0,
145 typename P0 = identity,
146 typename P1 = identity)(
147 requires input_range<Rng0> AND input_range<Rng1> AND
148 indirectly_comparable<iterator_t<Rng0>, iterator_t<Rng1>, C, P0, P1>)
149 constexpr bool RANGES_FUNC(equal)(
150 Rng0 && rng0, Rng1 && rng1, C pred = C{}, P0 proj0 = P0{}, P1 proj1 = P1{})
152 if(RANGES_CONSTEXPR_IF(sized_range<Rng0> && sized_range<Rng1>))
153 if(distance(rng0) != distance(rng1))
155 return detail::equal_nocheck(begin(rng0),
164 RANGES_FUNC_END(equal)
173#include <range/v3/detail/epilogue.hpp>
The indirectly_comparable concept.
The sentinel_for concept.
typename Fn::template invoke< Args... > invoke
Evaluate the invocable Fn with the arguments Args.
Definition meta.hpp:541
bool_< T::type::value==U::type::value > equal_to
A Boolean integral constant wrapper around the result of comparing T::type::value and U::type::value ...
Definition meta.hpp:237
Definition comparisons.hpp:28
Definition identity.hpp:25
Definition variant.hpp:621