Attribute inference for auto functions?

deadalnix deadalnix at gmail.com
Fri Apr 19 06:55:41 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.

Except for 2, this is already what is proposed.

As of for 2 I'd rather have a standard way to have attribute 
binding to the return type or the declaration. This is a 
recurring problem, and auto is simply one instance of it.

auto applied to the return type means that we infers the return 
type, applied to the function it means infers return type AND 
attributes.


More information about the Digitalmars-d mailing list