Я только заметил, что указатели, переданные в delete, могут быть const квалифицированными, а те, которые переданы в free, не могут. Это действительно сюрприз для меня.
И в С++ перегрузка на operator delete должна иметь подпись, например:
void operator delete(void* p);
Но добавление указателя const к указателю параметра недействительно:
void operator delete(void const* p);
Может кто-нибудь сказать мне, почему delete разработан таким образом?