module beard.contains;

public import std.typetuple : staticIndexOf;

/// Test if T... contains N.
template contains(N, T...) {
    enum contains = staticIndexOf!(N, T) != -1;
}

/// Test if C!T is defined for any T in T...
template containsMatch(alias C, T...) {
    static if (! T.length)
        enum containsMatch = false;
    else static if (C!(T[0]))
        enum containsMatch = true;
    else
        enum containsMatch = containsMatch!(C, T[1..$]);
}
// vim:ts=4 sw=4