Ambiguous template parameter names
Meta
jared771 at gmail.com
Thu May 3 00:52:58 UTC 2018
On Wednesday, 2 May 2018 at 20:32:43 UTC, jmh530 wrote:
> In the function below, there is a template parameter and a
> normal parameter both with the same name. However, the function
> returns the normal parameter. The template parameter is
> effectively ignored. I was surprised by this behavior.
>
> Is this a bug or intentional? I did not see it documented
> anywhere.
>
>
> ```
> int foo(int val)(int val)
> {
> return val;
> }
>
> void main()
> {
> assert(foo!1(2) == 2);
> }
> ```
It's not a big per se. It's a consequence of the declaration
expanding to the real template function form (I can't type it all
out as I'm on my phone), thus the inner `val` from the function
shadows the one from the template.
More information about the Digitalmars-d-learn
mailing list