Header file algorithms/find.hpp

namespace brigand
{
    namespace lazy
    {
        template <template <typename> class Sequence, typename ... Ls, typename Pred>
        struct find<Sequence<Ls...>, Pred>
        : detail::finder<Sequence, detail::bound_apply, Pred>::find<false, false, void, void, void, void, void, void, void, void, Ls...>
        {
        };
        
        template <template <typename> class Sequence, typename ... Ls, template <typename> class F>
        struct find<Sequence<Ls...>, bind<F, _1>>
        : detail::finder<Sequence, F>::find<false, false, void, void, void, void, void, void, void, void, Ls...>
        {
        };
    }
    
    template <typename Sequence, typename Predicate = brigand::detail::non_null>
    using find = typename lazy::find<Sequence, Predicate>::type;
    
    namespace lazy
    {
        template <typename Sequence, typename Predicate = detail::non_null>
        using reverse_find = ::brigand::lazy::reverse<::brigand::find<brigand::reverse<Sequence>, Predicate>>;
    }
    
    template <typename Sequence, typename Predicate = detail::non_null>
    using reverse_find = typename::brigand::lazy::reverse_find<Sequence, Predicate>::type;
    
    template <typename Sequence, typename Predicate = detail::non_null>
    using not_found = 'hidden';
    
    template <typename Sequence, typename Predicate = detail::non_null>
    using found = 'hidden';
}