== Quote from Andrei Alexandrescu ([email protected])'s article
> On 9/22/11 10:42 AM, pillsy wrote:
> > == Quote from Andrei Alexandrescu ([email protected])'s article
[...]
> >> Already does. We're looking for a briefer syntax.

> > What is the problem with just inferring the `return`, allowing you to 
> > replace

> >       (a,b) { return a + b; }

> > with

> >      (a, b) { a + b; }

> > This seems competitive with the other syntaxes for brevity, but ISTR there 
> > was
> > some objection to doing things that way.

> The objection is that it introduces a number of questions:

At the risk of relitigating a long-settled issue, I think there are good 
answers to all these questions.

> 1. How about using that syntax in regular functions?

That sounds great! :)

> 2. What if the lambda wants to actually evaluate the expression but
> return void?

Is this commonly important? If so, there are three possibilities:
     a. Have an expression with type void, perhaps a `void` literal or empty 
patens `()`, that can be used as the
ultimate expression when needed, as in

         (i) { total += i; void; }

    b. Require the use of a bare `return` in these cases.

    c. Require the return type to be explicitly declared as void in those 
cases. This seems like it's especially not a
problem for named functions, since `void` isn't any longer than `auto.

> 3. How is the semicolon relevant? (If its presence is used as a
> disambiguator for (2), it's poor design to predicate a large semantic
> difference on such a distinction.)

It's just part of the syntax. I agree that using it to disambiguate the 
function's return type is horrible. Mathematica
does that, and I've torn out a fair amount of my hair because of it over the 
years.
[...]
> > I'm not exactly a D template metaprogramming pro, but I think this would 
> > work for a lot of common cases.
> Such an approach has caused more trouble than benefits in C++.

Fair enough.

Cheers, Pillsy

Reply via email to