On Wednesday, 17 April 2013 at 07:04:16 UTC, Peter Alexander
wrote:
On Wednesday, 17 April 2013 at 01:55:54 UTC, Jesse Phillips
wrote:
On Tuesday, 16 April 2013 at 20:21:00 UTC, Peter Alexander
wrote:
This is the point I have a problem with:
2.2. One cannot opt out of nothrow or pure with auto
functions.
This argument has one solid answer: don't use auto when the
need is to specify an attribute pattern explicitly.
I find this unacceptable. Thanks to the proliferation of
template code in D, it is often rather difficult to spell out
return types. Indeed, this is part of the original reason for
auto's existence. Denying return type deduction for this use
case is a major inconvenience.
How frequently do you write a non-templated function which
returns a complex template type? It isn't something I really
think about, but I'm pretty sure if I am returning a complex
template type I've already got the function a template.
Often enough. I often find myself returning ranges, which are
almost invariably complex template types.
And, to be honest, I would just like to use auto without being
locked into inferred attributes. It just feels wrong that these
things should be conflated, and I get the feeling we will
regret this later on when D starts to be used in larger
projects.
I strongly believe you should never use "auto" for API types,
because it is too easy to break them. If
Dont-Repeat-Yourself/complex types is a problem, they should be
solved at the other end by enhancing function body type inference.
An alternative approach would be to do this optimization during
optimization. However, this means it has to be reimplemented in
dmd, LLVM, GCC separately. This is e.g. the case for
pure-inference in C code.