Header file range/v3/view/filter.hpp

#include <range/v3/range_fwd.hpp>

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

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

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

namespace ranges
{
    inline namespace v3
    {
        namespace view
        {
            struct filter_fn
            {
                template <typename Rng, typename Pred>
                remove_if_view<all_t<Rng>, logical_negate<Pred>> operator()(Rng&& rng, Pred pred) const;
                
                template <typename Pred>
                decltype(make_pipeable(std::bind(*this, std::placeholders::_1, protect(std::move(pred))))) operator()(Pred pred) const;
            };
            
            inline namespace 
            {
                constexpr auto& filter = static_const<filter_fn>::value;
            }
        }
    }
}