Bug in Auto Functions and Template? Or Am I Just Crazy...
Tobias Pankrath
tobias at pankrath.net
Wed Jun 27 02:24:12 PDT 2012
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
More information about the Digitalmars-d-learn
mailing list