class (handle (0)) == 'root'; class (libpointer) == 'lib.pointer'; class ([ libpointer, (handle (0)) ]) == 'handle'; % Why? The documentation says: MATLAB does not convert objects to a common superclass unless those objects derive from a member of a heterogeneous hierarchy. % This is not the case: isa (libpointer, 'math.mixin.Heterogeneous') == 0; % So what is going on here? Moreover: numel (superclasses (libpointer)) == 0; numel (superclasses (handle (0))) == 0; % So if they were heterogeneous, the superclass would be hidden. I am not sure how to test for that.