Я знаю, что delete с нулевым указателем является no-op:
В любой альтернативе, если значение операнда delete является нулевым указателем, операция не действует.
(С++ Standard5.3.5 [expr.delete] p2)
А также, что удаление указателя void* - это поведение undefined, потому что деструктор не может быть вызван, поскольку нет объектов типа void:
В первом альтернативе (
delete object) значение операнда delete должно быть указателем на объект без массива или указателем на под-объект, представляющий базовый класс такого объекта. Если нет, поведение undefined.
(С++ Standard5.3.5 [expr.delete] p2)
Теперь, как правило, я считаю, что вещи, которые перечислены, сначала перенаправляют вещи, которые перечислены позже, но как насчет указателя null void* следующим образом?
void* p = 0;
delete p; // UB or well-defined?