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)
42 template(typename O, typename F)(
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.