If the static type of the object to be deleted
is different from its dynamic type
and the selected deallocation function
is not a destroying operator delete,
the static type shall be a base class
of the dynamic type of the object to be deleted
and the static type shall have a virtual destructor
or the behavior is undefined
.