auto: useful, annoying or bad practice?

Mark smarksc at gmail.com
Sun May 13 05:14:16 UTC 2018


On Friday, 11 May 2018 at 18:44:25 UTC, H. S. Teoh wrote:
> On Fri, May 11, 2018 at 04:57:05PM +0000, Mark via 
> Digitalmars-d wrote:
>> On Wednesday, 9 May 2018 at 15:06:55 UTC, Jonathan M Davis 
>> wrote:
>> > Ultimately, the key is that the user of the function needs 
>> > to be able to know how to use the return type. In some 
>> > cases, that means returning a specific type, whereas in 
>> > others, it means using auto and being clear in the 
>> > documentation about what kind of API the return type has. As 
>> > long as the API is clear, then auto can be fantastic, but if 
>> > the documentation is poorly written (or non-existant), then 
>> > it can be a serious problem.
>> > 
>> > - Jonathan M Davis
>> 
>> He also needs to know what requirements the parameters of the 
>> function should satisfy. We have template constraints for 
>> that, even though that could also have been "implemented" 
>> through documentation.
>
> This makes me wonder if it might be useful to have return-type 
> constraints.  A kind of static out-contract?  Something that's 
> part of the function declaration, that ensures that the return 
> type satisfies certain properties.
>
> 	// Hypothetical syntax
> 	auto myfunc(R)(R r)
> 	if (isInputRange!R &&
> 		isOutputRange!return)
> 	{
> 		... // implementation here
> 	}
>
> The `isOutputRange!return` (this is just tentative syntax, you 
> guys can probably think of better ways of writing this) 
> statically enforces that the return type must satisfy 
> `isOutputRange`, and, being part of the function signature, 
> documents to the user what to expect of it.
-
> T

This method won't work for non-template functions (since template 
constraints can be used only in, well, templates). Granted, 
non-template functions with auto return type are pretty rare, but 
we probably don't want to impose an unnecessary restriction.


More information about the Digitalmars-d mailing list