Please do not use 'auto' return types without thoroughly describing the interface

Piotr Klos poliklosio at happypizza.com
Mon Dec 25 16:26:52 UTC 2017


On Monday, 25 December 2017 at 03:23:33 UTC, Neia Neutuladh wrote:
> If you have a function with a return type listed as `auto`, 
> please thoroughly describe what interface the return value 
> provides.
>

I would just like to say that I strongly agree. Lack of 
documentation of template parameters and other unspecified types 
in interfaces, like auto return types is one of the primary 
reasons for people to turn away from template libraries and 
regard templates as obscure.

> "Returns a forward range of Elem", where Elem is a template 
> parameter, is fine, for instance.
>
> But look at std.regex.RegexMatch.front:
>
> "Functionality for processing subsequent matches of global 
> regexes via range interface"
>
> It has an example that mentions a `hit` property. Other parts 
> of the RegexMatch interface mention `pre` and `post` 
> properties. What are they? It is a mystery!
>
> Turns out that the return type is a Captures struct, and that 
> could be made explicit with little effort. (Such as 
> https://github.com/dlang/phobos/pull/5963.)
>
> This *is* redundant. Looking at the source code lets you find 
> the return type in less than thirty seconds. Or you can put 
> into your code: `pragma(msg, ReturnType!(func).stringof);` 
> However, I imagine we'd lose a lot of people in the "see 
> missing documentation" → "look at source code" step.

This is not redundant. The documentation doesn't give enough 
information to use the interface, so its simply incomplete.


More information about the Digitalmars-d mailing list