Structs containing mutually referential sumtypes

Ben Jones fake at fake.fake
Thu Apr 2 22:42:18 UTC 2020

I'm trying to define some structs that contain sumTypes (using 
the sumtype library) that refer to each other, but I get a 
recursive template instantiation error.  It looks like typically 
recursion is handled in that library with the This type, but I 
don't see how that would apply here.  Any advice on how to get 
this to work?

struct Terminal{
  string name;

struct Op(string op){
   alias ElemType = SumType!(Terminal, Term);
   ElemType[] elems;


struct Term{
   alias ElemType = SumType!(Op!"+", Op!"-", Op!"*", Terminal);
   ElemType[] elems;


Errors with

Error: template instance SumType!(Op!"+", Op!"-", Op!"*", 
Terminal) recursive template expansion
../../../.dub/packages/sumtype-0.9.4/sumtype/src/sumtype.d(331,14): Error: template instance std.traits.isCopyable!(Term) error instantiating
source/errorbound/tracked.d(25,20):        instantiated from 
here: SumType!(Terminal, Term)
source/errorbound/tracked.d(31,29):        instantiated from 
here: Op!"+"
/usr/local/opt/dmd/include/dlang/dmd/std/meta.d(839,24): Error: 
template instance core.internal.traits.allSat!(isCopyable, 
Terminal, Term) error instantiating

More information about the Digitalmars-d-learn mailing list