D-Programming-Language/dmd — comment on commit 675898721c04d0bf155a85abf986eae99c37c0dc
File:  line 0
By baryluk:

This have nothing to do with auto return type. It is very simple how it works. It just uses type of expression passed to return(s), or void. Nothing mysterious here.

delegate (double a) { return a+1; }

is actually

delegate auto(double a) { return a+1; }

My question was that
delegate (a) { return a+1; }
delegate auto(a) { return a+1; }
looks to be polymorphic function/delegate, just like

delegate (T)(T a) { return a+1; }

But it is incorrect also (there is no such things like delegate templates.

So I do not really understand how a=>a+1; or delegate (a) { return a+1; } is correct in example with bar39!(a => a + 1)(3);

Similary what with other examples without argument types or multiple arguments?

(a) => (a+1); // is this correct?
(double a, double b) => (a>b); // should be correct, right?
(a,b) => (a>b); // is this correct ?

As of =>, you are correct, it is distinct from >=. But still -> will make me fell me and my brain much better (it is more obvious, it is different from =>). => have oviously some advantages, like being similar to mathemtical inference symbol, but -> on the other hand is more similar to function mapping symbol. Which is exactly what we want here.