This is not true. The delete first calls the destructor. After destruction, you will be left with void* . (A typical implementation, in fact, the destructor calls the operator delete() function, since calling operator delete() to call depends on the derived class itself.)
As for why your T const* becomes T* in the destructor: this is any different than:
{ T const anObject; // ... } // destructor of anObject called here. With T*, not T const*
? You can argue according to different rules, but, in the end, destructors are special and follow special rules.
source share