GuillaumeDua / CppShelf

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

[mp] contains_any_of #173

Open GuillaumeDua opened 7 months ago

GuillaumeDua commented 7 months ago

TODO: any_of + bind std::disjunction<std::is_same<placeholder, Us>>


See https://godbolt.org/z/edvTWcPj4

template <typename T, typename U>
struct contains_any_of;
template <template <typename...> typename pack, typename ... Ts, typename ... Us>
struct contains_any_of<pack<Ts...>, pack<Us...>>
    : std::integral_constant<
        bool,
        (std::is_same_v<std::tuple<Us...>, std::tuple<Ts>> or ...)
    >
{};
template <typename T, typename U>
constexpr auto contains_any_of_v = contains_any_of<T, U>::value;
struct A{};struct B{};struct C{};

int main() {
    static_assert(contains_any_of_v<
        std::tuple<A,B,C>,
        std::tuple<A>
    >);
    static_assert(contains_any_of_v<
        std::tuple<A,B,C>,
        std::tuple<B>
    >);
    static_assert(contains_any_of_v<
        std::tuple<A,B,C>,
        std::tuple<C>
    >);
}