Я не понимаю цели boost:: checked_delete. В документации указано:
Стандарт С++ позволяет, в 5.3.5/5, указатели на неполные типы классов удаляется с помощью выражения-удаления. Когда класс имеет нетривиальный деструктор или специфический для класса оператор delete, поведение undefined. Некоторые компиляторы выдает предупреждение, когда неполный тип удалены, но, к сожалению, не все и программисты иногда игнорируют или отключить предупреждения.
Поставляемая функция и класс шаблоны могут использоваться для предотвращения этих проблемы, поскольку они требуют полного тип и вызвать ошибку компиляции в противном случае.
Таким образом, стандарт С++ позволяет удалить неполные типы, что вызывает поведение undefined, если тип имеет нетривиальный деструктор. Какие? Как может неполный тип вообще иметь деструктор? Не является ли неполным типом только прототип?