Header file range/v3/algorithm/copy.hpp

#include <range/v3/range_fwd.hpp>

#include <range/v3/begin_end.hpp>

#include <range/v3/range_traits.hpp>

#include <range/v3/range_concepts.hpp>

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

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

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

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

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

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

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

namespace ranges
{
    inline namespace v3
    {
        struct copy_fn;
        
        inline namespace 
        {
            constexpr auto& copy = static_const<with_braced_init_args<copy_fn>>::value;
        }
    }
}

Class ranges::v3::copy_fn

struct copy_fn
: aux::copy_fn
{
    using aux::copy_fn::operator();
    
    template <typename I, typename S, typename O, int _concept_requires_41 = 42, typename std::enable_if<(_concept_requires_41==43)||(InputIterator<I>()&&Sentinel<S, I>()&&WeaklyIncrementable<O>()&&IndirectlyCopyable<I, O>()), int>::type=0>
    tagged_pair<tag::in(I), tag::out(O)> operator()(I, O, I begin, S end, O out) const;
    
    template <typename Rng, typename O, typename I = range_iterator_t<Rng>, int _concept_requires_56 = 42, typename std::enable_if<(_concept_requires_56==43)||(InputRange<Rng>()&&WeaklyIncrementable<O>()&&IndirectlyCopyable<I, O>()), 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) const;
};

@{


Variable ranges::v3::copy

constexpr auto& copy = static_const<with_braced_init_args<copy_fn>>::value;

copy_fn