12 template<
typename T,
typename Alloc,
typename D,
typename... Args>
13 inline std::unique_ptr<T, D> allocate_unique(Alloc alloc, Args&&... args)
15 using traits = std::allocator_traits<Alloc>;
16 auto ptr = traits::allocate(alloc, 1);
18 traits::construct(alloc, ptr, std::forward<Args>(args)...);
20 traits::deallocate(alloc, ptr, 1);
25 return std::unique_ptr<T, D>(
27 [alloc = std::move(alloc)](
auto p)
mutable {
28 auto ptr =
const_cast<T*
>(
reinterpret_cast<const T*
>(p));
29 traits::destroy(alloc, ptr);
30 traits::deallocate(alloc, ptr, 1);