GuillaumeDua / CppShelf

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

[mp] replace_if #164

Open GuillaumeDua opened 7 months ago

GuillaumeDua commented 7 months ago

Associated with #163


// replace_if
template <typename, template <typename> typename, typename>
struct replace_if;
template <template <typename ...> typename pack, template <typename> typename predicate, typename ... Ts, typename new_t>
struct replace_if<pack<Ts...>, predicate, new_t> : std::type_identity<
    pack<
        std::conditional_t<
            predicate<Ts>::value,
            new_t,
            Ts
        >...
    >
>{};
template <typename pack, template <typename> typename predicate, typename new_t>
using replace_if_t = replace_if<pack, predicate, new_t>::type;