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