[Issue 13869] New: Not good error message with not compatible lambda template argument
via Digitalmars-d-bugs
digitalmars-d-bugs at puremagic.com
Tue Dec 16 03:05:52 PST 2014
https://issues.dlang.org/show_bug.cgi?id=13869
Issue ID: 13869
Summary: Not good error message with not compatible lambda
template argument
Product: D
Version: D2
Hardware: x86
OS: Windows
Status: NEW
Keywords: diagnostic
Severity: normal
Priority: P1
Component: DMD
Assignee: nobody at puremagic.com
Reporter: bearophile_hugs at eml.cc
void foo(double function(double) @safe,
double function(double) @safe) {}
void main() {
enum real y = 1;
foo(x => double(y), x => x); // line 5, OK
foo(x => y, x => x); // line 6, Error
}
dmd 2.067alpha gives:
test.d(6,8): Error: function test.foo (double function(double) @safe _param_0,
double function(double) @safe _param_1) is not callable using argument types
(void, void)
The line 5 is correct because the two given template lambdas match the
functions in the 'foo' signature. While the line 6 is not correct because the
first lambda template returns a real, that is not compatible with a function
that returns a double.
In both lines the second lambda template is correct, but the error message
gives a "(void, void)", so if the first lambda template doesn't match, the
second isn't even tried. This doesn't help me find what of the two lambdas is
the wrong one.
And even for the first lambda template, giving just a "void" when the given
lambda template returns a real instead of a double seems excessive.
So ideally I'd like an error message more like:
test.d(6,8): Error: function test.foo(double function(double) @safe _param_0,
double function(double) @safe _param_1) is not callable using argument types
(real function(double) @safe, double function(double) @safe), the first
argument doesn't match
--
More information about the Digitalmars-d-bugs
mailing list