https://issues.dlang.org/show_bug.cgi?id=18646
Issue ID: 18646 Summary: Recursive template expansion incorrectly reported for certain templated classes Product: D Version: D2 Hardware: x86_64 OS: Mac OS X Status: NEW Severity: normal Priority: P1 Component: dmd Assignee: nob...@puremagic.com Reporter: publicna...@gmail.com With certain configurations of templated classes/interfaces with refinements, a recursive template expansion is incorrectly reported. This only occurs if the classes are in a certain order. To reproduce: 1) Create a D file and enter the following code: void main() {} class SuperClass {} class TemplatedClass(T : SuperClass) {} class A : SuperClass { alias T = TemplatedClass!B; } class B : SuperClass { alias T = TemplatedClass!C; } class C : SuperClass {} 2) Compile the code. Actual result: test.d(12): Error: class `test.TemplatedClass(T : SuperClass)` recursive template expansion test.d(12): while looking for match for TemplatedClass!(C) Expected result: no error Build 2018-03-22 on Mac OS 10.12.6 on DMD64 D Compiler v2.079.0 On the other hand, the following two examples both work: 1) Changed specialisation to constraint: void main() {} class SuperClass {} class TemplatedClass(T) if (is(T : SuperClass)) {} class A : SuperClass { alias T = TemplatedClass!B; } class B : SuperClass { alias T = TemplatedClass!C; } class C : SuperClass {} 2) Reordered: void main() {} class SuperClass {} class TemplatedClass(T : SuperClass) {} class B : SuperClass { alias T = TemplatedClass!C; } class A : SuperClass { alias T = TemplatedClass!B; } class C : SuperClass {} --