The only thing I'm seeing that isn't in ocaml is the syntax for owned and shared pointers, which is an abomination that ought to stay contained within C++. I see what you mean though. That complicates things a little bit. Although I don't see how it can't be solved with making all reference types implement a virtual destructor.