Bug 10533 – Bad diagnostic when template has alias overloads

Status
NEW
Severity
normal
Priority
P3
Component
dmd
Product
D
Version
D2
Platform
All
OS
All
Creation time
2013-07-03T18:59:28Z
Last change time
2024-12-13T18:08:51Z
Keywords
diagnostic
Assigned to
No Owner
Creator
Andrej Mitrovic
Moved to GitHub: dmd#18620 →

Comments

Comment #0 by andrej.mitrovich — 2013-07-03T18:59:28Z
----- struct S1 { T get(T)() if (is(T == float)) { } } struct S2 { auto get(alias value)() { return S1.get!(typeof(value)); } } struct S3 { auto get(alias value)() { return get!(typeof(value)); } T get(T)() if (is(T == float)) { return T.init; } } void main() { // Error: template instance get!int does not match template declaration get(T)() if (is(T == float)) S1.get!int; // Error: template instance get!int does not match template declaration get(T)() if (is(T == float)) S2.get!1; // Error: cannot resolve type for this.get!int S3.get!1; } ----- Observations: S2.get calls into S1.get, and creates a nice error message. However in S3 the get templates are overloaded against each other, and this causes the diagnostic to become bad. S3.get should have the same diagnostic as S2.get.
Comment #1 by robert.schadek — 2024-12-13T18:08:51Z
THIS ISSUE HAS BEEN MOVED TO GITHUB https://github.com/dlang/dmd/issues/18620 DO NOT COMMENT HERE ANYMORE, NOBODY WILL SEE IT, THIS ISSUE HAS BEEN MOVED TO GITHUB