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