Wow! I'm really lucky as far as finding bizzare language subtelties or compiler
bugs but... I've actually encountered this behaviour before. I guess I just
assumed you can use constructor syntax with any type.
@rayman22201 array is pretty much std::array and seq is pretty much
std::vector. I think I even read sometime ago that this is how they are
compiled to C++ backend. Also: the only difference between tuple and object
without of ... (e.x. of RootObj) is type safety --- a tuple behaves
structurally (you can assign any compatible tuple to it), contrary to an
object. It seems to me objects are widely preferred for most usecases.
Be careful when setting fields after you create a type value/instance. While
tempting, it causes its fields, even the ones you change immediately after
construction, to be initialized by default values. Which can be quite
inefficient for large objects, actually. You can use {.noInit.} pragma to omit
initialization of a variable and then initialize its fields without any
performance penalty.