digitalmars.D.bugs - Other weird template alias bug
- Andy Friesen (37/37) Jun 23 2004 The following code recurses (printing 'int' over and over) until the
The following code recurses (printing 'int' over and over) until the stack overflows: struct Empty; template TypeList(T, R) { struct TypeList { alias T Type; alias R Rest; } } template Blah(A, alias B, alias C) { void Blah() { typeid(C.Type).print(); .Blah!(A, B, C.Rest)(); } } template Blah(A, alias B, C : Empty) { void Blah() { printf("Empty!\n"); } } alias TypeList!(int, TypeList!(float, TypeList!(char, Empty))) TL; int main() { Blah!(Empty, main, TL)(); return 0; } Changing the definition of TypeList to: template TypeList(T, R) { alias T Type; alias R Rest; } Causes an illegal operation and the error messages: template instance TypeList!(float,TypeList_aS6ttest25Empty) does not match any template declaration template instance TypeList!(float,TypeList_aS6ttest25Empty) cannot resolve forward reference (that's it for now. Honest) -- andy
Jun 23 2004