Named arguments via struct initialization in functions

ZombineDev via Digitalmars-d digitalmars-d at puremagic.com
Thu Mar 10 11:01:53 PST 2016


On Monday, 7 March 2016 at 19:06:54 UTC, Chris Wright wrote:
> On Mon, 07 Mar 2016 11:06:13 +0000, ZombineDev wrote:
>> The compiler should detect that this call is ambiguous and 
>> would not allow it.
>
> It's a potentially significant amount of work to determine that 
> the expression is ambiguous, or to disambiguate.

I don't think so. At least not much more than what currently the 
compiler does for overload resolution (comparing the void(A) 
overloard to the void(B)). Tuples literals / struct initializer 
literals / delegates should be classified before the end of the 
parsing phase (which is actually at least an order of magnitude 
faster than the semantic phase).

>> To resolve the ambiguity, the user can write:
>> foo(A{ x: 1 });
>
> That's why I suggested it.
>
>>> And you only need explicit type marking at the top level; 
>>> it's unambiguous after that.
>> 
>> I'm not sure what you mean by "explicit type marking at the 
>> top level".
>
> It always is unambiguous to write things like:
>   auto a = A{x: {y: 1}};

Ah ok, agreed.




More information about the Digitalmars-d mailing list