[Issue 7768] New: More readable template error messages
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Sat Mar 24 23:23:20 PDT 2012
http://d.puremagic.com/issues/show_bug.cgi?id=7768
Summary: More readable template error messages
Product: D
Version: D2
Platform: All
OS/Version: All
Status: NEW
Keywords: diagnostic
Severity: minor
Priority: P2
Component: DMD
AssignedTo: nobody at puremagic.com
ReportedBy: k.hara.pg at gmail.com
--- Comment #0 from Kenji Hara <k.hara.pg at gmail.com> 2012-03-24 23:23:43 PDT ---
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)
}
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
More information about the Digitalmars-d-bugs
mailing list