#ifndef TYPEASVALUE_SRC_UTILITY_PREDICATE_H_ #define TYPEASVALUE_SRC_UTILITY_PREDICATE_H_ #include "conditional/if.h" #include "operation/logic.h" namespace tav { namespace utility { template < template class Predicate, typename Surrogate > struct predicate_assurance { template using assure = If< Eval>, Value, Surrogate >; }; template < template class Function, typename... Arguments > struct defer_eval { typedef Function type; }; template < template class Predicate, template class Charge, typename Surrogate > struct predicate_guard { template using check = Eval>, defer_eval, Surrogate >>; }; template class Predicate> struct predicate_negator { template using function = Not>; }; } } #endif // TYPEASVALUE_SRC_UTILITY_PREDICATE_H_