Header file range/v3/algorithm/set_algorithm.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/algorithm/copy.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
    {
        struct includes_fn;
        
        inline namespace 
        {
            constexpr auto& includes = static_const<with_braced_init_args<includes_fn>>::value;
        }
        
        struct set_union_fn
        {
            template <typename I1, typename S1, typename I2, typename S2, typename O, typename C = ordered_less, typename P1 = ident, typename P2 = ident, int _concept_requires_89 = 42, typename std::enable_if<(_concept_requires_89==43)||(Mergeable<I1, I2, O, C, P1, P2>()&&Sentinel<S1, I1>()&&Sentinel<S2, I2>()), int>::type=0>
            tagged_tuple<tag::in1(I1), tag::in2(I2), tag::out(O)> operator()(I1, I2, O, I1 begin1, S1 end1, I2 begin2, S2 end2, O out, C pred_ = C{}, P1 proj1_ = P1{}, P2 proj2_ = P2{}) const;
            
            template <typename Rng1, typename Rng2, typename O, typename C = ordered_less, typename P1 = ident, typename P2 = ident, typename I1 = range_iterator_t<Rng1>, typename I2 = range_iterator_t<Rng2>, int _concept_requires_128 = 42, typename std::enable_if<(_concept_requires_128==43)||(Mergeable<I1, I2, O, C, P1, P2>()&&Range<Rng1>()&&Range<Rng2>()), int>::type=0>
            tagged_tuple<tag::in1(range_safe_iterator_t<Rng1>), tag::in2(range_safe_iterator_t<Rng2>), tag::out(O)> operator()(range_safe_iterator_t<Rng1>, range_safe_iterator_t<Rng2>, O, Rng1&& rng1, Rng2&& rng2, O out, C pred = C{}, P1 proj1 = P1{}, P2 proj2 = P2{}) const;
        };
        
        inline namespace 
        {
            constexpr auto& set_union = static_const<with_braced_init_args<set_union_fn>>::value;
        }
        
        struct set_intersection_fn
        {
            template <typename I1, typename S1, typename I2, typename S2, typename O, typename C = ordered_less, typename P1 = ident, typename P2 = ident, int _concept_requires_147 = 42, typename std::enable_if<(_concept_requires_147==43)||(Mergeable<I1, I2, O, C, P1, P2>()&&Sentinel<S1, I1>()&&Sentinel<S2, I2>()), int>::type=0>
            O operator()(I1 begin1, S1 end1, I2 begin2, S2 end2, O out, C pred_ = C{}, P1 proj1_ = P1{}, P2 proj2_ = P2{}) const;
            
            template <typename Rng1, typename Rng2, typename O, typename C = ordered_less, typename P1 = ident, typename P2 = ident, typename I1 = range_iterator_t<Rng1>, typename I2 = range_iterator_t<Rng2>, int _concept_requires_177 = 42, typename std::enable_if<(_concept_requires_177==43)||(Mergeable<I1, I2, O, C, P1, P2>()&&Range<Rng1>()&&Range<Rng2>()), int>::type=0>
            O operator()(Rng1&& rng1, Rng2&& rng2, O out, C pred = C{}, P1 proj1 = P1{}, P2 proj2 = P2{}) const;
        };
        
        inline namespace 
        {
            constexpr auto& set_intersection = static_const<with_braced_init_args<set_intersection_fn>>::value;
        }
        
        struct set_difference_fn
        {
            template <typename I1, typename S1, typename I2, typename S2, typename O, typename C = ordered_less, typename P1 = ident, typename P2 = ident, int _concept_requires_196 = 42, typename std::enable_if<(_concept_requires_196==43)||(Mergeable<I1, I2, O, C, P1, P2>()&&Sentinel<S1, I1>()&&Sentinel<S2, I2>()), int>::type=0>
            tagged_pair<tag::in1(I1), tag::out(O)> operator()(I1, O, I1 begin1, S1 end1, I2 begin2, S2 end2, O out, C pred_ = C{}, P1 proj1_ = P1{}, P2 proj2_ = P2{}) const;
            
            template <typename Rng1, typename Rng2, typename O, typename C = ordered_less, typename P1 = ident, typename P2 = ident, typename I1 = range_iterator_t<Rng1>, typename I2 = range_iterator_t<Rng2>, int _concept_requires_228 = 42, typename std::enable_if<(_concept_requires_228==43)||(Mergeable<I1, I2, O, C, P1, P2>()&&Range<Rng1>()&&Range<Rng2>()), int>::type=0>
            tagged_pair<tag::in1(range_safe_iterator_t<Rng1>), tag::out(O)> operator()(range_safe_iterator_t<Rng1>, O, Rng1&& rng1, Rng2&& rng2, O out, C pred = C{}, P1 proj1 = P1{}, P2 proj2 = P2{}) const;
        };
        
        inline namespace 
        {
            constexpr auto& set_difference = static_const<with_braced_init_args<set_difference_fn>>::value;
        }
        
        struct set_symmetric_difference_fn
        {
            template <typename I1, typename S1, typename I2, typename S2, typename O, typename C = ordered_less, typename P1 = ident, typename P2 = ident, int _concept_requires_247 = 42, typename std::enable_if<(_concept_requires_247==43)||(Mergeable<I1, I2, O, C, P1, P2>()&&Sentinel<S1, I1>()&&Sentinel<S2, I2>()), int>::type=0>
            tagged_tuple<tag::in1(I1), tag::in2(I2), tag::out(O)> operator()(I1, I2, O, I1 begin1, S1 end1, I2 begin2, S2 end2, O out, C pred_ = C{}, P1 proj1_ = P1{}, P2 proj2_ = P2{}) const;
            
            template <typename Rng1, typename Rng2, typename O, typename C = ordered_less, typename P1 = ident, typename P2 = ident, typename I1 = range_iterator_t<Rng1>, typename I2 = range_iterator_t<Rng2>, int _concept_requires_288 = 42, typename std::enable_if<(_concept_requires_288==43)||(Mergeable<I1, I2, O, C, P1, P2>()&&Range<Rng1>()&&Range<Rng2>()), int>::type=0>
            tagged_tuple<tag::in1(range_safe_iterator_t<Rng1>), tag::in2(range_safe_iterator_t<Rng2>), tag::out(O)> operator()(range_safe_iterator_t<Rng1>, range_safe_iterator_t<Rng2>, O, Rng1&& rng1, Rng2&& rng2, O out, C pred = C{}, P1 proj1 = P1{}, P2 proj2 = P2{}) const;
        };
        
        inline namespace 
        {
            constexpr auto& set_symmetric_difference = static_const<with_braced_init_args<set_symmetric_difference_fn>>::value;
        }
    }
}

Class ranges::v3::includes_fn

struct includes_fn
{
    template <typename I1, typename S1, typename I2, typename S2, typename C = ordered_less, typename P1 = ident, typename P2 = ident, int _concept_requires_49 = 42, typename std::enable_if<(_concept_requires_49==43)||(Comparable<I1, I2, C, P1, P2>()&&Sentinel<S1, I1>()&&Sentinel<S2, I2>()), int>::type=0>
    bool operator()(I1 begin1, S1 end1, I2 begin2, S2 end2, C pred_ = C{}, P1 proj1_ = P1{}, P2 proj2_ = P2{}) const;
    
    template <typename Rng1, typename Rng2, typename C = ordered_less, typename P1 = ident, typename P2 = ident, typename I1 = range_iterator_t<Rng1>, typename I2 = range_iterator_t<Rng2>, int _concept_requires_71 = 42, typename std::enable_if<(_concept_requires_71==43)||(Comparable<I1, I2, C, P1, P2>()&&Range<Rng1>()&&Range<Rng2>()), int>::type=0>
    bool operator()(Rng1&& rng1, Rng2&& rng2, C pred = C{}, P1 proj1 = P1{}, P2 proj2 = P2{}) const;
};

@{


Variable ranges::v3::includes

constexpr auto& includes = static_const<with_braced_init_args<includes_fn>>::value;

includes_fn


Variable ranges::v3::set_union

constexpr auto& set_union = static_const<with_braced_init_args<set_union_fn>>::value;

set_union_fn


Variable ranges::v3::set_intersection

constexpr auto& set_intersection = static_const<with_braced_init_args<set_intersection_fn>>::value;

set_intersection_fn


Variable ranges::v3::set_difference

constexpr auto& set_difference = static_const<with_braced_init_args<set_difference_fn>>::value;

set_difference_fn


Variable ranges::v3::set_symmetric_difference

constexpr auto& set_symmetric_difference = static_const<with_braced_init_args<set_symmetric_difference_fn>>::value;

set_symmetric_difference_fn