Header file range/v3/algorithm/transform.hpp

#include <meta/meta.hpp>

#include <range/v3/range_fwd.hpp>

#include <range/v3/begin_end.hpp>

#include <range/v3/range_concepts.hpp>

#include <range/v3/range_traits.hpp>

#include <range/v3/utility/iterator_concepts.hpp>

#include <range/v3/utility/iterator_traits.hpp>

#include <range/v3/utility/functional.hpp>

#include <range/v3/utility/unreachable.hpp>

#include <range/v3/utility/static_const.hpp>

#include <range/v3/utility/tagged_pair.hpp>

#include <range/v3/utility/tagged_tuple.hpp>

#include <range/v3/algorithm/tagspec.hpp>

namespace ranges
{
    inline namespace v3
    {
        template <typename I, typename O, typename F, typename P = ident, typename V = iterator_common_reference_t<I>, typename X = concepts::Callable::result_t<P, V>, typename Y = concepts::Callable::result_t<F, X>>
        using Transformable1 = meta::strict_and<InputIterator<I>, WeaklyIncrementable<O>, IndirectCallable<F, projected<I, P>>, Writable<O, Y&&>>;
        
        template <typename I0, typename I1, typename O, typename F, typename P0 = ident, typename P1 = ident, typename V0 = iterator_common_reference_t<I0>, typename X0 = concepts::Callable::result_t<P0, V0>, typename V1 = iterator_common_reference_t<I1>, typename X1 = concepts::Callable::result_t<P1, V1>, typename Y = concepts::Callable::result_t<F, X0, X1>>
        using Transformable2 = meta::strict_and<InputIterator<I0>, InputIterator<I1>, WeaklyIncrementable<O>, IndirectCallable<F, projected<I0, P0>, projected<I1, P1>>, Writable<O, Y&&>>;
        
        struct transform_fn;
        
        inline namespace 
        {
            constexpr auto& transform = static_const<with_braced_init_args<transform_fn>>::value;
        }
    }
}

Class ranges::v3::transform_fn

struct transform_fn
{
    template <typename I, typename S, typename O, typename F, typename P = ident, int _concept_requires_68 = 42, typename std::enable_if<(_concept_requires_68==43)||(Sentinel<S, I>()&&Transformable1<I, O, F, P>()), int>::type=0>
    tagged_pair<tag::in(I), tag::out(O)> operator()(I, O, I begin, S end, O out, F fun_, P proj_ = P{}) const;
    
    template <typename Rng, typename O, typename F, typename P = ident, typename I = range_iterator_t<Rng>, int _concept_requires_80 = 42, typename std::enable_if<(_concept_requires_80==43)||(Range<Rng>()&&Transformable1<I, O, F, P>()), int>::type=0>
    tagged_pair<tag::in(range_safe_iterator_t<Rng>), tag::out(O)> operator()(range_safe_iterator_t<Rng>, O, Rng&& rng, O out, F fun, P proj = P{}) const;
    
    template <typename I0, typename S0, typename I1, typename S1, typename O, typename F, typename P0 = ident, typename P1 = ident, int _concept_requires_90 = 42, typename std::enable_if<(_concept_requires_90==43)||(Sentinel<S0, I0>()&&Sentinel<S1, I1>()&&Transformable2<I0, I1, O, F, P0, P1>()), int>::type=0>
    tagged_tuple<tag::in1(I0), tag::in2(I1), tag::out(O)> operator()(I0, I1, O, I0 begin0, S0 end0, I1 begin1, S1 end1, O out, F fun_, P0 proj0_ = P0{}, P1 proj1_ = P1{}) const;
    
    template <typename Rng0, typename Rng1, typename O, typename F, typename P0 = ident, typename P1 = ident, typename I0 = range_iterator_t<Rng0>, typename I1 = range_iterator_t<Rng1>, int _concept_requires_107 = 42, typename std::enable_if<(_concept_requires_107==43)||(Range<Rng0>()&&Range<Rng1>()&&Transformable2<I0, I1, O, F, P0, P1>()), int>::type=0>
    tagged_tuple<tag::in1(range_safe_iterator_t<Rng0>), tag::in2(range_safe_iterator_t<Rng1>), tag::out(O)> operator()(range_safe_iterator_t<Rng0>, range_safe_iterator_t<Rng1>, O, Rng0&& rng0, Rng1&& rng1, O out, F fun, P0 proj0 = P0{}, P1 proj1 = P1{}) const;
    
    template <typename I0, typename S0, typename I1, typename O, typename F, typename P0 = ident, typename P1 = ident, int _concept_requires_120 = 42, typename std::enable_if<(_concept_requires_120==43)||(Sentinel<S0, I0>()&&Transformable2<I0, I1, O, F, P0, P1>()), int>::type=0>
    tagged_tuple<tag::in1(I0), tag::in2(I1), tag::out(O)> operator()(I0, I1, O, I0 begin0, S0 end0, I1 begin1, O out, F fun, P0 proj0 = P0{}, P1 proj1 = P1{}) const;
    
    template <typename Rng0, typename I1Ref, typename O, typename F, typename P0 = ident, typename P1 = ident, typename I1 = uncvref_t<I1Ref>, typename I0 = range_iterator_t<Rng0>, int _concept_requires_133 = 42, typename std::enable_if<(_concept_requires_133==43)||(Range<Rng0>()&&Iterator<I1>()&&Transformable2<I0, I1, O, F, P0, P1>()), int>::type=0>
    tagged_tuple<tag::in1(range_safe_iterator_t<Rng0>), tag::in2(I1), tag::out(O)> operator()(range_safe_iterator_t<Rng0>, I1, O, Rng0&& rng0, I1Ref&& begin1, O out, F fun, P0 proj0 = P0{}, P1 proj1 = P1{}) const;
};

@{


Variable ranges::v3::transform

constexpr auto& transform = static_const<with_braced_init_args<transform_fn>>::value;

transform_fn