Шаблон std::unique_ptr имеет два параметра: тип плацдарма и тип делетера. Этот второй параметр имеет значение по умолчанию, поэтому вы обычно просто пишете что-то вроде std::unique_ptr<int>.
Шаблон std::shared_ptr имеет только один параметр: тип получателя. Но вы также можете использовать пользовательский делетер с этим, даже если тип делетера не находится в шаблоне класса. Обычная реализация использует методы стирания типов для этого.
Есть ли причина, по которой одна и та же идея не использовалась для std::unique_ptr?