Bug 7768 – More readable template error messages

Status
RESOLVED
Resolution
FIXED
Severity
minor
Priority
P2
Component
dmd
Product
D
Version
D2
Platform
All
OS
All
Creation time
2012-03-24T23:23:00Z
Last change time
2012-03-26T20:56:28Z
Keywords
diagnostic, pull
Assigned to
nobody
Creator
k.hara.pg

Comments

Comment #0 by k.hara.pg — 2012-03-24T23:23:43Z
This code has bad usage of std.conv.parse template function. But raised error message is less readable. import std.conv; void test1() { int value; parse(value); // Error: template std.conv.parse(Target,Source) // if (isSomeChar!(ElementType!(Source)) && isIntegral!(Target)) // does not match any function template declaration // Error: template std.conv.parse(Target,Source) // if (isSomeChar!(ElementType!(Source)) && isIntegral!(Target)) // cannot deduce template function from argument types !()(int) } parse template function is overloaded, so printing template parameter and constraint is much confusing. It should print like follows: // Error: template std.conv.parse does not match any // function template declaration // Error: template std.conv.parse cannot deduce template function // from argument types !()(int) } "matches more than one template declaration" error message has same problem. void foo(T)(T val) if (is(T : int)) {} void foo(T)(T val) if (is(T : long)) {} void test2() { foo(10); // Error: template test.foo(T) if (is(T : int)) foo(T) if (is(T : int)) // matches more than one template declaration, // test.d(29):foo(T) if (is(T : int)) and // test.d(30):foo(T) if (is(T : long)) should print: // Error: template test.foo matches more than one template declaration, // test.d(29):foo(T) if (is(T : int)) and // test.d(30):foo(T) if (is(T : long)) } If there is only one template function, keeping specialized error message is better. void bar(T)(T val) if (is(T : int)) {} void test3() { bar("abc"); // Error: test.bar does not match any function template declaration // Error: template test.bar(T) if (is(T : int)) cannot deduce // template function from argument types !()(string) }
Comment #1 by k.hara.pg — 2012-03-24T23:26:33Z
Comment #2 by k.hara.pg — 2012-03-25T01:16:57Z
*** Issue 2696 has been marked as a duplicate of this issue. ***
Comment #3 by github-bugzilla — 2012-03-26T18:42:04Z
Commit pushed to master at https://github.com/D-Programming-Language/dmd https://github.com/D-Programming-Language/dmd/commit/28c0da04f3640f3313b1229161232fee53ca1cd2 Merge pull request #839 from 9rnsr/fix7768 Issue 7768 - More readable template error messages