A Discussion of Tuple Syntax

Dicebot public at dicebot.lv
Mon Aug 19 17:13:23 PDT 2013


On Monday, 19 August 2013 at 23:55:32 UTC, Meta wrote:
> On Monday, 19 August 2013 at 23:48:36 UTC, Meta wrote:
>> ...
>
> An addendum:
>
> void main()
> {
> 	//Prints 1
> 	writeln(func(TypeTuple!(1, 2)));
> }
>
> int func(int i, int j)
> {
> 	return i;
> }
>
> This is bad and should never be allowed with some hypothetical 
> tuple literal syntax. The desired behaviour is:
>
> void main()
> {
>     //Error: func is not callable using argument types (#(int, 
> int))
>     writeln(func(#(1, 2));
> }
>
> *Unless* you use .expand/[] (pick your poison):
>
> void main()
> {
>     writeln(func(#(1, 2).expand)); //Or #(1, 2)[]
> }

No. No. Absolutely no. What you want is simply syntax sugar for 
std.typecons.Tuple - it is not worth any language change, 
contrary to semantical issues with built-in tuples. 
Auto-expansion and integration with function/template parameter 
lists is what makes D built-in tuple that useful and it should 
stay so with hypothetical tuple literals.


More information about the Digitalmars-d mailing list