Bug in Auto Functions and Template? Or Am I Just Crazy...

Timon Gehr timon.gehr at gmx.ch
Wed Jun 27 04:24:11 PDT 2012


On 06/27/2012 11:07 AM, 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?
>

Apparently the compiler attempts to type combine the types of the
return statements. This does not match the language documentation. I
think it should just use the type of the first return statement.

> (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


This is expected behaviour. UFCS only works with module scope functions.


More information about the Digitalmars-d-learn mailing list