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