The most likely explanation is that MSVC/Borland assume that if you delete on a void *, you are effectively doing a free() which is void * anyway!