Header file algorithms/remove.hpp

namespace brigand
{
    namespace lazy
    {
        template <template <class> class L, typename ... Ts, typename Pred>
        struct remove_if<L<Ts...>, Pred>
        : 'hidden'
        {
        };
        
        template <template <class> class L, typename ... Ts, template <typename> class F>
        struct remove_if<L<Ts...>, bind<F, _1>>
        : 'hidden'
        {
        };
        
        template <template <class> class L, typename ... Ts, template <typename> class F>
        struct remove_if<L<Ts...>, F<_1>>
        : 'hidden'
        {
        };
    }
    
    namespace lazy
    {
        template <template <class> class L, typename ... Ts, typename T>
        struct remove<L<Ts...>, T>
        : 'hidden'
        {
        };
    }
    
    namespace lazy
    {
        template <template <class> class L, typename ... Ts, typename Pred>
        struct filter<L<Ts...>, Pred>
        : 'hidden'
        {
        };
        
        template <template <class> class L, typename ... Ts, template <typename> class F>
        struct filter<L<Ts...>, bind<F, _1>>
        : 'hidden'
        {
        };
        
        template <template <class> class L, typename ... Ts, template <typename> class F>
        struct filter<L<Ts...>, F<_1>>
        : 'hidden'
        {
        };
    }
    
    template <typename L, typename Pred>
    using remove_if = typename lazy::remove_if<L, Pred>::type;
    
    template <typename L, typename T>
    using remove = typename lazy::remove<L, T>::type;
    
    template <typename L, typename Pred>
    using filter = typename lazy::filter<L, Pred>::type;
}