template parameter list syntax

Carl Sturtivant sturtivant at gmail.com
Sun Jan 20 16:22:09 UTC 2019


On Sunday, 20 January 2019 at 12:35:58 UTC, Patrick Schluter 
wrote:
> On Saturday, 19 January 2019 at 22:52:25 UTC, Carl Sturtivant
>
> Afaik it's a parser problem. Walter wanted to avoid the 
> catastrophic state that exist in C++ of an ambiguous grammar. 
> He insited that the the grammar of the D language be as 
> straightforward as can be.
> In the template declaration, both parenthesis pairs are 
> required and the parser knows directly that first '(' == 
> template parameter, second '(' rt parameter.
> At the instanciation site, it was preferred to have parameter 
> inference, i.e. that the template parameter [1] can be omitted 
> if it can be deduced from the runtime parameter. This has the 
> consequence that the starting '(' becomes ambiguous, it can 
> mean template parameter start or runtime parameter start. Using 
> another operator allows to lift the ambiguity. Forcing to have 
> parenthesis would also lift the ambiguity, but it would be at 
> the cost of parameter inference as it would be impossible 
> distinguish between infered parameter or no parameter. ! was 
> chosen because it is light and its only use is in prefix 
> context, in template instantiation it's in a infix position and 
> thus completely unambiguous with the ! operator.
> [1]: https://tour.dlang.org/tour/en/basics/templates

You've given a more detailed version of a response given earlier.
https://forum.dlang.org/post/xypridqjaqxosnxaqbjm@forum.dlang.org

So my reply to that is also pertinent here.
https://forum.dlang.org/post/anlnnizkcohoznigynpj@forum.dlang.org




More information about the Digitalmars-d mailing list