GuillaumeDua / CppShelf

Collection of powerfuls - C++ Single-Header Libraries Files
https://guillaumedua.github.io/CppShelf/
MIT License
9 stars 1 forks source link

[mp] count_if #162

Open GuillaumeDua opened 8 months ago

GuillaumeDua commented 8 months ago
// count_if - occurences of ttps that satisfy predicate<ttps>::value
// Clang: template <typename...> typename predicate instead of template <typename> typename predicate
template <template <typename...> typename predicate, typename ... ttps>
struct count_if : std::integral_constant<
    std::size_t,
    (0 + ... + std::size_t{predicate<ttps>::value})
>{
    static_assert(requires { ((predicate<ttps>::value) and ...); });
};
template <template <typename...> typename predicate, template <typename...> typename pack, typename ... ttps>
struct count_if<predicate, pack<ttps...>> : count_if<predicate, ttps...>{};
template <template <typename...> typename predicate, typename ... ttps>
constexpr std::size_t count_if_v = count_if<predicate, ttps...>::value;