digitalmars.D.learn - Structs containing mutually referential sumtypes
- Ben Jones (32/32) Apr 02 2020 I'm trying to define some structs that contain sumTypes (using
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 ```
Apr 02 2020