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