[Issue 12694] New: Better error message for function call matching more than overload

via Digitalmars-d-bugs digitalmars-d-bugs at puremagic.com
Fri May 2 16:22:46 PDT 2014


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

          Issue ID: 12694
           Summary: Better error message for function call matching more
                    than overload
           Product: D
           Version: D2
          Hardware: All
                OS: All
            Status: NEW
          Severity: enhancement
          Priority: P1
         Component: DMD
          Assignee: nobody at puremagic.com
          Reporter: bearophile_hugs at eml.cc

void bar(float) {}
void bar(double) {}
void bar(real) {}
void main() {
    bar(1);
}



Gives in dmd 2.066alpha:

temp.d(5,8): Error: temp.bar called with argument types (int) matches both:
temp.d(1,6):     temp.bar(float _param_0)
and:
temp.d(3,6):     temp.bar(real _param_0)


I suggest to list all overloads and remove the word "both". I suggest to use a
visual output similar to the one generated fixing Issue 8101 , that gives
errors that look like this:

temp.d(7,5): Error: None of the overloads of 'foo' are callable using argument
types (), candidates are:
temp.d(1,6):        temp.foo(int _param_0)
temp.d(2,6):        temp.foo(int _param_0, int _param_1)


So I suggest an error message like:

temp.d(5,8): Error: call to 'bar' with argument types (int) matches more than
one overload, candidates are:
temp.d(1,6):        test.bar(float _param_0)
temp.d(2,6):        test.bar(double _param_0)
temp.d(3,6):        test.bar(real _param_0)


I think it's useful to improve such error messages because calling functions is
one of the most basic and common operations you do in D.

See also Issue 2789 .

--


More information about the Digitalmars-d-bugs mailing list