mirror of
https://github.com/dlang/dmd.git
synced 2025-04-27 21:51:03 +03:00
Show nested template function signature in candidate message (#16827)
Part of Bugzilla 20713 - Improve Template Deduction Error Message Given Template Parameter Default Values
This commit is contained in:
parent
6a79518936
commit
855521dd86
2 changed files with 23 additions and 2 deletions
|
@ -1799,13 +1799,16 @@ if (is(Decl == TemplateDeclaration) || is(Decl == FuncDeclaration))
|
||||||
if (!print)
|
if (!print)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
// if td.onemember is a function, toCharsMaybeConstraints can print it
|
||||||
|
// without us recursing, otherwise we have to handle it.
|
||||||
// td.onemember may not have overloads set
|
// td.onemember may not have overloads set
|
||||||
// (see fail_compilation/onemember_overloads.d)
|
// (see fail_compilation/onemember_overloads.d)
|
||||||
// assume if more than one member it is overloaded internally
|
// assume if more than one member it is overloaded internally
|
||||||
bool recurse = td.onemember && td.members.length > 1;
|
bool recurse = td.onemember && (!td.onemember.isFuncDeclaration ||
|
||||||
|
td.members.length > 1);
|
||||||
OutBuffer buf;
|
OutBuffer buf;
|
||||||
HdrGenState hgs;
|
HdrGenState hgs;
|
||||||
hgs.skipConstraints = true;
|
hgs.skipConstraints = true; // failing constraint should get printed below
|
||||||
hgs.showOneMember = !recurse;
|
hgs.showOneMember = !recurse;
|
||||||
toCharsMaybeConstraints(td, buf, hgs);
|
toCharsMaybeConstraints(td, buf, hgs);
|
||||||
const tmsg = buf.peekChars();
|
const tmsg = buf.peekChars();
|
||||||
|
|
18
compiler/test/fail_compilation/nested_template_constraint.d
Normal file
18
compiler/test/fail_compilation/nested_template_constraint.d
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
/*
|
||||||
|
TEST_OUTPUT:
|
||||||
|
---
|
||||||
|
fail_compilation/nested_template_constraint.d(17): Error: template `foo` is not callable using argument types `!()(string, int)`
|
||||||
|
fail_compilation/nested_template_constraint.d(10): Candidate is: `foo(int x = 0)`
|
||||||
|
fail_compilation/nested_template_constraint.d(11): - Containing: `foo(T, U)(T t, U u)`
|
||||||
|
---
|
||||||
|
*/
|
||||||
|
|
||||||
|
template foo(int x = 0) {
|
||||||
|
void foo(T, U)(T t, U u)
|
||||||
|
if (is(T == int) && is(U == int)) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
foo("hello", 4);
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue