13#ifndef RANGES_V3_ALGORITHM_GENERATE_N_HPP
14#define RANGES_V3_ALGORITHM_GENERATE_N_HPP
21#include <range/v3/algorithm/result_types.hpp>
28#include <range/v3/utility/static_const.hpp>
30#include <range/v3/detail/prologue.hpp>
36 template<
typename O,
typename F>
37 using generate_n_result = detail::out_fun_result<O, F>;
39 RANGES_FUNC_BEGIN(generate_n)
44 constexpr generate_n_result<O, F>
45 RANGES_FUNC(generate_n)(O
first, iter_difference_t<O> n, F fun)
47 RANGES_EXPECT(n >= 0);
49 auto b = uncounted(
first);
50 for(; 0 != n; ++b, --n)
52 return {recounted(
first, b, norig), detail::move(fun)};
55 RANGES_FUNC_END(generate_n)
59 using ranges::generate_n;
60 using ranges::generate_n_result;
65#include <range/v3/detail/epilogue.hpp>
The output_iterator concept.
template(typename O, typename F)(AND output_iterator< O
function template generate_n
typename Fn::template invoke< Args... > invoke
Evaluate the invocable Fn with the arguments Args.
Definition: meta.hpp:541
front< Pair > first
Retrieve the first element of the pair Pair.
Definition: meta.hpp:2251