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