Self-referential struct mixins

Elie Morisse syniurge at
Sun Nov 17 17:35:07 UTC 2019

On Sunday, 17 November 2019 at 07:13:52 UTC, rbscott wrote:
> I got this working in the simple case if none of the fields are 
> self-referential, but it breaks as soon as there is a loop.
> Here is a gist which demonstrates the issue: 

This is a DMD bug, you should open an issue.

It's part of a bigger family of issues caused by how DMD's 
semantic analysis is architectured. I tried to tackle it some 
time ago but didn't see it through the end :

As I see it the proper fix requires rewritting a large part of 
the compiler frontend, but this is definitely something worth 
doing at some point to make DMD less brittle esp. regarding 
advanced usage of mixins/CTFE (I don't have time anymore, and 
IMHO someone should be paid 2 months to work full-time on 
re-architecturing DMD for this)

On Sunday, 17 November 2019 at 09:16:19 UTC, Claude wrote:
> Anyway, upon the mixin template instantiation, you can try to 
> 'declare' all your struct's on top and then properly 'define' 
> them afterwards:
> struct A;
> struct B;
> struct A {
>   B* b;
> }
> struct B {
>   A* a;
> }
> Have you tried that?

Forward declaring structs isn't allowed in D.

More information about the Digitalmars-d mailing list