Copio y pego del ISO/IEC N3690
Cita: 5.3.5 Delete [expr.delete]
1 The delete-expression operator destroys a most derived object (1.8)
or array created by a new-expression.
delete-expression:
:: opt delete cast-expression
:: opt delete [ ] cast-expression
... ... ... ...
3 In the first alternative (delete object), if the static type of the object to
be deleted is different from its dynamic type, 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. In the second
alternative (delete array) if the dynamic type of the object to be deleted
differs from its static type, the behavior is undefined.
(las negritas son mías :)