Header file range/v3/view/tokenize.hpp

#include <range/v3/range_fwd.hpp>

#include <range/v3/view_interface.hpp>

#include <range/v3/begin_end.hpp>

#include <range/v3/range_concepts.hpp>

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

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

#include <range/v3/view/all.hpp>

namespace ranges
{
    inline namespace v3
    {
        template <typename Rng, typename Regex, typename SubMatchRange>
        struct tokenize_view;
        
        namespace view
        {
            struct tokenizer_impl_fn
            {
                template <typename Rng, typename Regex>
                tokenize_view<all_t<Rng>, Regex, int> operator()(Rng&& rng, Regex&& rex, int sub = 0, std::regex_constants::match_flag_type flags = std::regex_constants::match_default) const;
                
                template <typename Rng, typename Regex>
                tokenize_view<all_t<Rng>, Regex, std::vector<int>> operator()(Rng&& rng, Regex&& rex, std::vector<int> subs, std::regex_constants::match_flag_type flags = std::regex_constants::match_default) const;
                
                template <typename Rng, typename Regex>
                tokenize_view<all_t<Rng>, Regex, std::initializer_list<int>> operator()(Rng&& rng, Regex&& rex, std::initializer_list<int> subs, std::regex_constants::match_flag_type flags = std::regex_constants::match_default) const;
                
                template <typename Regex>
                decltype(make_pipeable(std::bind(*this, std::placeholders::_1, bind_forward<Regex>(rex), std::move(sub), std::move(flags)))) operator()(Regex&& rex, int sub = 0, std::regex_constants::match_flag_type flags = std::regex_constants::match_default) const;
                
                template <typename Regex>
                decltype(make_pipeable(std::bind(*this, std::placeholders::_1, bind_forward<Regex>(rex), std::move(subs), std::move(flags)))) operator()(Regex&& rex, std::vector<int> subs, std::regex_constants::match_flag_type flags = std::regex_constants::match_default) const;
                
                template <typename Regex>
                decltype(make_pipeable(std::bind(*this, std::placeholders::_1, bind_forward<Regex>(rex), std::move(subs), std::move(flags)))) operator()(Regex&& rex, std::initializer_list<int> subs, std::regex_constants::match_flag_type flags = std::regex_constants::match_default) const;
            };
            
            struct tokenize_fn
            : ranges::v3::view::tokenizer_impl_fn
            {
                template <typename ... Args>
                decltype(base()(std::forward<Args>(args)...)) operator()(Args&&... args) const;
                
                template <typename Arg0, typename ... Args>
                decltype(base()(std::forward<Arg0>(arg0), std::move(subs), std::forward<Args>(args)...)) operator()(Arg0&& arg0, std::initializer_list<int> subs, Args&&... args) const;
                
                template <typename Arg0, typename Arg1, typename ... Args>
                decltype(base()(std::forward<Arg0>(arg0), std::forward<Arg1>(arg1), std::move(subs), std::forward<Args>(args)...)) operator()(Arg0&& arg0, Arg1&& arg1, std::initializer_list<int> subs, Args&&... args) const;
            };
            
            inline namespace 
            {
                constexpr auto& tokenize = static_const<tokenize_fn>::value;
            }
        }
    }
}

Class template ranges::v3::tokenize_view<Rng, Regex, SubMatchRange>

template <typename Rng, typename Regex, typename SubMatchRange>
struct tokenize_view
: view_interface<tokenize_view<Rng, Regex, SubMatchRange>, is_finite<Rng>::value ? finite : range_cardinality<Rng>::value>
{
    using iterator = std::regex_token_iterator<range_iterator_t<Rng>>;
    
    tokenize_view() = default;
    
    tokenize_view(Rng rng, Regex&& rex, SubMatchRange subs, std::regex_constants::match_flag_type flags);
    
    iterator begin();
    
    template <int _concept_requires_63 = 42, typename std::enable_if<(_concept_requires_63==43)||(View<Rng const>()), int>::type=0>
    iterator begin() const;
    
    iterator end() const;
    
    Rng& base();
    
    Rng const& base() const;
};

@{