/// \file // Range v3 library // // Copyright Eric Niebler 2014-present // // Use, modification and distribution is subject to the // Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // // Project home: https://github.com/ericniebler/range-v3 // #ifndef RANGES_V3_ALGORITHM_FOR_EACH_HPP #define RANGES_V3_ALGORITHM_FOR_EACH_HPP #include #include #include #include #include #include #include #include #include #include #include #include #include namespace ranges { /// \addtogroup group-algorithms /// @{ template using for_each_result = detail::in_fun_result; RANGES_FUNC_BEGIN(for_each) /// \brief function template \c for_each template(typename I, typename S, typename F, typename P = identity)( /// \pre requires input_iterator AND sentinel_for AND indirectly_unary_invocable>) for_each_result RANGES_FUNC(for_each)(I first, S last, F fun, P proj = P{}) { for(; first != last; ++first) { invoke(fun, invoke(proj, *first)); } return {detail::move(first), detail::move(fun)}; } /// \overload template(typename Rng, typename F, typename P = identity)( /// \pre requires input_range AND indirectly_unary_invocable, P>>) for_each_result, F> // RANGES_FUNC(for_each)(Rng && rng, F fun, P proj = P{}) { return {(*this)(begin(rng), end(rng), ref(fun), detail::move(proj)).in, detail::move(fun)}; } RANGES_FUNC_END(for_each) namespace cpp20 { using ranges::for_each; using ranges::for_each_result; } // namespace cpp20 /// @} } // namespace ranges #include #endif