On Friday, 19 April 2013 at 12:43:49 UTC, Piotr Szturmaj wrote:
What about this:
auto inferReturnTypeAndAttributes() { ... }
auto(return) inferOnlyReturnType() { ... }
or since all attributes are constraints, it can be rewritten to:
auto inferOnlyReturnType() pure nothrow @safe { ... }
It really doesn't make sense to infer impurity, throwing or
unsafety because these are the default.
I imagine there are some use cases where programmer for example
wants to infer all but purity, possibly because some other part
of the code relies on pure behavior of his function, and he
doesn't care about the other attributes. Example of pure
function where nothrow and safety are inferred:
auto inferAllButPurity() pure { ... }
To sum up:
1. auto - infers all
2. auto(return) - infers only a return type
3. auto fn() attrs... - infers return type and all not
specified attributes
Second and third are equivalent, thus auto(return) is optional.
There were some voices about breaking overriden functions by
adding/inferring superclass function attribute. I think this is
an oversight, virtual functions should not have attributes
inferred.
I like this. It provides a good balance of control and automation.
how would template functions be treated with auto(return)?