recursive template expansion: Why does this not compile?

Ontonator dlang_forum at mailinator.com
Wed Mar 21 00:47:18 UTC 2018


The following code does not compile:
> 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 {}

It gives the error:
> test.d(12): Error: class `test.TemplatedClass(T : SuperClass)` 
> recursive template expansion
> test.d(12):        while looking for match for 
> TemplatedClass!(C)

The aliases do not have to be aliases, as long as there is some 
reference to the class (e.g. method and variable declarations 
also work). What exactly is the reason for this error?


More information about the Digitalmars-d-learn mailing list