import std.stdio;

T[] find(alias pred, T)(T[] input)
    if (is(typeof(pred(input[0])) == bool))
{
    for (; input.length > 0; input = input[1 .. $])
    {
        if (pred(input[0])) break;
    }
    return input;
}

unittest
{
    int zero = 0;

    bool isTypeLow(int x)
    {
        return x < zero;
    }

    static bool isTypeBig(int x)
    {
        // Из-за static zero не будет видно внутри функции
        return x > zero;
    }

    int[] a = [ 1, 2, 3, 4, -5, 3, -4 ];
    // Найти первое отрицательное число
    auto b = find!(isTypeLow)(a).dup;
    writeln(b);
    auto c = find!(isTypeBig)(b);
    writeln(c);
}
