On Wednesday, 27 June 2012 at 09:07:57 UTC, Michael wrote:
Hello all,
I came across some weird behaviors yesterday and I can't figure out what it's about.

(1)
auto factorial(int n) {
        if (n < 2) return 1;
        return n * factorial(n-1);
}

The compiler complained about "forward declaration of factorial". If I change the return type to int, the problem goes away. I can understand that with the recursion, it might be impossible for the compiler to deduce the type of factorial and so it compile errors, but I don't see anything about that on the Language Reference. Is this the intended behavior?

(2)
auto stuff(T)(T[] arr) {
        auto inner(T[] s) {
                s[0] = 0;
        }
        arr.inner();
}
This time the compiler complained about 'inner' not being defined. This time I have no idea what is wrong.

Thanks for your help!
Michael

(1) is intended bahaviour, though I do think that the compiler could be smarter. At least the cases, that could be tail-call-optimize could also be inferred.

(2) looks like a bug to me

Reply via email to