template fib(int n:0) {
    enum { fib = 0 }
}

template fib(int n:1) {
    enum { fib = 1 }
}

template fib(int n) {
    enum { fib = fib!(n-1) + fib!(n-2) }
}


extern (C)  { char *printf(char *, ...); }

char[] gatoi(int x)
{   
    char[] gatoi = "";
    if (x == 0)
        return "0";
    else
        while (x > 0)
        {   
            gatoi = "0123456789"[x%10] ~ gatoi;
            x /= 10;
        }
    return gatoi;
}

char[] do_for(int x, int y)
{   
    char[] do_for;
    for (int i=x; i<y; i++)
        do_for ~= `printf("%d\n", fib!(` ~ gatoi(i) ~ "));\n";
    return do_for;
}

void main(char[][] args)
{   
    pragma (msg, do_for(0, 20));
}

