It is not clear to me under which conditions on `T` one can pass `T` around between threads. If I run the following program import threadpool type Tree = object d: int left, right: ref Tree template `~`[T](a: T): ref T = var x: ref T new(x) x[] = a x proc tree(depth: int): Tree = if depth == 0: Tree(d: 0) else: Tree(d: depth, left: ~tree(depth - 1), right: ~tree(depth - 1)) proc main() = let t = spawn tree(3) sync() let s = ^t echo s main()
I get the error `Error: cannot create a flowVar of type: Tree`. It must have to do something with the self reference, but I am not sure why this limitation exists