www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Implementing a tree with recursive Algebraic

reply Kamil Koczurek <koczurekk gmail.com> writes:
Hi,
I'm trying to implement a simple tree and this 3-liner was my 
initial idea:

struct Tree(T) {
   Algebraic!(Tree, T)[] content;
}

But it doesn't work and I get the following error message:
/.../variant.d(...): Error: struct `app.Tree` no size because of 
forward reference
/.../variant.d(...): Error: template instance 
`std.variant.maxSize!(Tree, string)` error instantiating
source/app.d(10,3):        instantiated from here: 
`Algebraic!(Tree, string)`

Can I somehow fix this, or is my approach inherently flawed?
Jun 15 2018
parent reply Adam D. Ruppe <destructionator gmail.com> writes:
On Friday, 15 June 2018 at 14:53:13 UTC, Kamil Koczurek wrote:
 Can I somehow fix this, or is my approach inherently flawed?
A tree there would be storing a copy of a tree which is storing a copy of a tree... where would it end? You can make the tree store a *pointer* to a tree though. That's the traditional way to do it and it works here too.
Jun 15 2018
parent Kamil Koczurek <koczurekk gmail.com> writes:
On Friday, 15 June 2018 at 14:57:33 UTC, Adam D. Ruppe wrote:
 You can make the tree store a *pointer* to a tree though. 
 That's the traditional way to do it and it works here too.
Oh, alright. I changed Tree to be a class instead of a struct and it seems to work just fine now. Thanks a lot!
Jun 15 2018