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)
92 constexpr bool RANGES_FUNC(equal)(I0 begin0,
102 if(distance(begin0, end0) != distance(begin1, end1))
104 return detail::equal_nocheck(std::move(begin0),
114 template(
typename Rng0,
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,
149 constexpr bool RANGES_FUNC(equal)(
150 Rng0 && rng0, Rng1 && rng1, C pred = C{}, P0 proj0 = P0{}, P1 proj1 = P1{})
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.
The sized_sentinel_for concept.
decltype(begin(declval(Rng &))) iterator_t
Definition access.hpp:698
typename Fn::template invoke< Args... > invoke
Evaluate the invocable Fn with the arguments Args.
Definition meta.hpp:541
Definition adjacent_find.hpp:67
Definition comparisons.hpp:28
Definition identity.hpp:25