16 #ifndef OPENKALMAN_COMPATIBILITY_RANGES_ALGORITHM_HPP 17 #define OPENKALMAN_COMPATIBILITY_RANGES_ALGORITHM_HPP 25 #ifdef __cpp_lib_ranges 26 using std::ranges::in_out_result;
27 using std::ranges::copy;
28 using std::ranges::copy_result;
30 template<
typename I,
typename O>
36 template<
typename I2,
typename O2, std::enable_if_t<
37 stdex::convertible_to<const I&, I2> and
38 stdex::convertible_to<const O&, O2>,
int> = 0>
45 template<
class I2,
class O2, std::enable_if_t<
46 stdex::convertible_to<I, I2> and
47 stdex::convertible_to<O, O2>,
int> = 0>
51 return {std::move(in), std::move(out)};
56 template<
typename I,
typename O>
64 template<
typename I,
typename S,
typename O, std::enable_if_t<
65 stdex::input_iterator<I> and
66 stdex::sentinel_for<I, S> and
67 stdex::weakly_incrementable<O> and
68 stdex::indirectly_copyable<I, O>,
int> = 0>
70 operator()(I first, S last, O result)
const 72 for (; first != last; ++first, (void)++result)
74 return {std::move(first), std::move(result)};
78 template<
typename R,
typename O, std::enable_if_t<
80 stdex::weakly_incrementable<O> and
81 indirectly_copyable<iterator_t<R>, O>,
int> = 0>
83 operator()(R&& r, O result)
const 85 return (*
this)(ranges::begin(r), ranges::end(r), std::move(result));
Definition: algorithm.hpp:31
Definition: common.hpp:200
Definition: algorithm.hpp:62