Mutually recursive template expansion

bauss jj_1337 at
Mon Oct 4 11:38:04 UTC 2021

On Friday, 1 October 2021 at 14:26:39 UTC, jfondren wrote:
> On Friday, 1 October 2021 at 14:03:06 UTC, Stephen wrote:
>> This code should work should mutual recursion be supported.
> It still wouldn't work, because structs are value types and 
> it's impossible to say how large either struct is:
> Error: struct `mutualrec.Ar` no size because of forward 
> reference
> With s/struct/class/ it still wouldn't work because this is a 
> mixin problem rather than a problem of template mutual 
> recursion:
> ```d
> mixin(q{ class Ar { Br b; } });
> mixin(q{ class Br { Ar b; } });
> ```
> mutualrec2.d-mixin-1(1): Error: undefined identifier `Br`, did 
> you mean class `Ar`?
> This seems like a surprising limitation of mixin, though, which 
> isn't highlighted by the spec.

Actually it is covered by the spec.


It clearly says:

Each AssignExpression in the ArgumentList is evaluated at compile 

Which means that Br cannot be used in Ar since it cannot be 
evaluated at compile time during the mixin of Ar.

More information about the Digitalmars-d-learn mailing list