diff options
Reduced `Filter` and `Remove` implementations to direct aliases
* i.e. instead of defining full class templates in the `detail` namespace we only define predicate helpers
* I don't like how some symbols have to be prefixed with `tav::` in the `detail` namespace to prevent conflicts - this is one reason why as much implementation as possible should be moved to template aliases
Diffstat (limited to 'src/list/operation/higher/remove.h')
-rw-r--r-- | src/list/operation/higher/remove.h | 21 |
1 files changed, 8 insertions, 13 deletions
diff --git a/src/list/operation/higher/remove.h b/src/list/operation/higher/remove.h index e67e962..598f5a6 100644 --- a/src/list/operation/higher/remove.h +++ b/src/list/operation/higher/remove.h @@ -7,18 +7,10 @@ namespace tav { namespace detail { -template < - template<typename> class Predicate, - typename List -> -class Remove { - private: - template <typename Element> - using predicate_negator = Not<Predicate<Element>>; - - public: - typedef tav::Filter<predicate_negator, List> type; - +template <template<typename> class Predicate> +struct predicate_negator { + template <typename Element> + using function = Not<Predicate<Element>>; }; } @@ -27,7 +19,10 @@ template < template<typename> class Predicate, typename List > -using Remove = Eval<detail::Remove<Predicate, List>>; +using Remove = Filter< + detail::predicate_negator<Predicate>::template function, + List +>; } |