I'm mainly concerned with user-defined objects (which don't necessarily have any ancestors). RootRef seems to be equivalent to ref[RootObj], which isn't general enough for my purposes. If I were to forcibly cast an incompatible ref object type into a RootRef, would it trip up the GC? All I care about is the actual address and keeping the object alive. I saw GC_ref, but I can't use it because it would be impossible to use GC_unref once the original type is forgotten.