Something else, for ``ref``, ``out`` and return value, you need to be able to express not just the input, but the output and output on exception type states. I.e. ``void destroy(?nonnull,initialized,initialized ref T*)`` Otherwise you cannot catch a change of type state.