Function template literals - or "just" parameter type inference?

Jakob Ovrum jakobovrum at gmail.com
Wed Nov 20 00:09:35 PST 2013


On Wednesday, 20 November 2013 at 07:52:30 UTC, Kenji Hara wrote:
> With the lambda `(const x){ ... } `, the lambda parameter name 
> `x` is
> parsed as TypeIdentifier.
> Then semantic analysis handle the `x` as a lambda parameter 
> name that
> requires type inference.
>
> Similarly, with `void foo(const x) {}`, `x` is parsed as 
> TypeIdentifier.
> However, semantic analysis will handle it as a Type name of 
> unnamed
> function parameter.
>
> The difference is in semantic analysis phase, but not in parsing
> phase. Therefore the current Parameter grammar is correct.

Thank you, that's very interesting.

> Do you use the word "function template" as meaning 
> function/delegate/lambda
> literal which requires parameter type inference?

Yes, my mistake. Named function templates are of course not 
affected by this issue.

> I was not sure that the fun!int is legitimate usage.

I also ask this question. I think it may prove useful, and code 
in the wild might be relying on it.

> Therefore, I didn't mention about the 'template lambda'
> semantics in documentation.

Right.

My guess is that it will either take many years before this 
implementation-specific behaviour causes a problem, or 
alternatively, before it is finally decided that the behaviour 
should be elevated to become part of the specification. Either 
way, it's probably not worth spending time on this problem right 
now.


More information about the Digitalmars-d mailing list