https://issues.dlang.org/show_bug.cgi?id=17263

RazvanN <razvan.nitu1...@gmail.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |razvan.nitu1...@gmail.com

--- Comment #4 from RazvanN <razvan.nitu1...@gmail.com> ---
Hi Ali,

Now the diagnostic is:

test2.d(4): Error: none of the overloads of template
`std.algorithm.iteration.map` are callable using argument types `!()(int[],
void)`
/home/razvann/Dlang/dmd/generated/linux/release/64/../../../../../phobos/std/algorithm/iteration.d(436):
       Candidate is: `map(fun...)`
  with `fun = ()`
  must satisfy the following constraint:
`       fun.length >= 1`


I know it's not what you expected but isn't this better?

I am afraid that the actual error ("You forgot `!`") cannot be outputted
because when the template is instantiated we are in the semantic phase where we
no longer know whether the ! was present or not. In other words, we cannot know
just by looking at the AST if the user provided template instance was `[1,
2].map(i => i);` or `[1, 2].map!()(i => i);`. So. I think that this is the best
we could probably do in this case.

--

Reply via email to