Header file range/v3/view/tail.hpp

#include <range/v3/range_fwd.hpp>

#include <range/v3/begin_end.hpp>

#include <range/v3/empty.hpp>

#include <range/v3/size.hpp>

#include <range/v3/range_traits.hpp>

#include <range/v3/range_concepts.hpp>

#include <range/v3/view_interface.hpp>

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

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

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

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

namespace ranges
{
    inline namespace v3
    {
        template <typename Rng>
        struct tail_view;
        
        namespace view
        {
            struct tail_fn
            {
                template <typename Rng, int _concept_requires_97 = 42, typename std::enable_if<(_concept_requires_97==43)||(InputRange<Rng>()), int>::type=0>
                tail_view<all_t<Rng>> operator()(Rng&& rng) const;
                
                template <typename Rng, int _concept_requires_106 = 42, typename std::enable_if<(_concept_requires_106==43)||(!InputRange<Rng>()), int>::type=0>
                void operator()(Rng&&) const;
            };
            
            inline namespace 
            {
                constexpr auto& tail = static_const<view<tail_fn>>::value;
            }
        }
    }
}

Class template ranges::v3::tail_view<Rng>

template <typename Rng>
struct tail_view
: view_interface<tail_view<Rng>, (range_cardinality<Rng>::value > 0) ? (enum ranges::v3::cardinality)(range_cardinality<Rng>::value - 1) : range_cardinality<Rng>::value>
{
    using iterator = range_iterator_t<Rng>;
    
    using sentinel = range_sentinel_t<Rng>;
    
    tail_view() = default;
    
    tail_view(Rng rng);
    
    iterator begin();
    
    template <int _concept_requires_62 = 42, typename std::enable_if<(_concept_requires_62==43)||(Range<Rng const>()), int>::type=0>
    iterator begin() const;
    
    sentinel end();
    
    template <int _concept_requires_71 = 42, typename std::enable_if<(_concept_requires_71==43)||(Range<Rng const>()), int>::type=0>
    sentinel end() const;
    
    template <int _concept_requires_76 = 42, typename std::enable_if<(_concept_requires_76==43)||(SizedView<Rng>()), int>::type=0>
    constexpr range_size_t<Rng> size() const;
    
    Rng& base();
    
    Rng const& base() const;
};

@{