cxx type hierarchy