Attribute inference for auto functions?
John Colvin
john.loughran.colvin at gmail.com
Fri Apr 19 06:43:40 PDT 2013
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)?
More information about the Digitalmars-d
mailing list