Tommi:
Do you consider it to be good or bad style of programming to use consistently auto as function return type?
In Python programming you don't specify the types of function arguments and return values, but while this is possible in Haskell too, it's good practice to write down input and output types for functions, and let the type inferencer work just inside functions.
In D I use auto often inside function, unless I want to change a type or unless I want to be sure a certain variable has a desired type. But for clarity/readability I prefer to specify input/output types of D functions, unless they return a complex range. In this case I sometimes add a static assert to be sure it yields a range of my desired type:
auto foo(...) out (result) { static assert(ForeachType!(typeof(result)) == ushort); } body { ... } Bye, bearophile