// https://bugzilla.gdcproject.org/show_bug.cgi?id=122
// { dg-do compile }

struct map(alias fun)
{
    @property run()
    {
    }
}

struct Task(Args)
{
    Args _args;
}

class TaskPool
{
    template reduce(functions...)
    {
        auto reduce(Args)(Args args)
        {
            alias RTask = Task!(typeof(args));
            auto task = RTask();
        }
    }
}

TaskPool taskPool() {
    return new TaskPool;
}

void test122()
{
    enum delta = 1;
    taskPool.reduce!"a + b"(map!({ immutable x = delta; })());
}