Here is the relevant issue: handle mutually-circular type declarations · Issue #269 · JuliaLang/julia · GitHub
Bottom line is that it is not resolved yet. The “accepted” solution is to use type-parameters (I think) https://github.com/JuliaLang/julia/issues/269#issuecomment-68421745
I haven’t come across your trick with try yet. It sure seems to work, the top example from 269 is:
julia> try
struct Foo
a::Bar
Foo() = new()
Foo(a) = new(a)
end
catch
end
struct Bar
b::Foo
Bar() = new()
Bar(b) = new(b)
end
julia> struct Foo
a::Bar
Foo() = new()
Foo(a) = new(a)
end
julia> Foo(Bar(Foo()))
Foo(Bar(Foo(#undef)))