#ifndef TYPEASVALUE_SRC_LIST_OPERATION_HIGHER_FILTER_H_ #define TYPEASVALUE_SRC_LIST_OPERATION_HIGHER_FILTER_H_ #include "fold.h" #include "conditional/if.h" namespace tav { template < template class Predicate, typename List > class Filter { private: template < typename Current, typename Previous > struct predicate_wrapper { typedef If< Predicate::type::value, Cons, Previous > type; }; public: typedef typename Fold::type type; }; template < template class Predicate, typename List > class Remove { private: template using predicate_negator = Not>; public: typedef typename Filter::type type; }; } #endif // TYPEASVALUE_SRC_LIST_OPERATION_HIGHER_FILTER_H_