Named arguments via struct initialization in functions

Marc Schütz via Digitalmars-d digitalmars-d at puremagic.com
Tue Mar 8 03:55:00 PST 2016


On Monday, 7 March 2016 at 18:21:24 UTC, Meta wrote:
> On Monday, 7 March 2016 at 10:40:15 UTC, ZombineDev wrote:
>> Which I don't think will cause ambiguity with delegates:
>> auto tuple3 = { getInt() }; tuple
>> auto tuple3 = { getInt(); }; lambda
>
> Unfortunately this will not work. There was a tuple proposal 
> sometime back in 2012 or 2013. I can't remember the exact 
> reason, but somebody came up with a case where it can be 
> ambiguous as to whether it's a tuple or a delegate.

I believe it was the empty tuple, which is indistinguishable from 
a do-nothing lambda.

     pragma(msg, typeof({}));
     // prints:
     // void function() pure nothrow @nogc @safe

Nothing that can't be solved, I'd say. Just define `{}` to mean 
one of them and provide a workaround for the other one.

OTOH, distinguishing between tuples and lambdas requires 
unlimited lookahead and backtracking, which can become expensive 
for pathological cases.


More information about the Digitalmars-d mailing list