18#ifndef TRINITY_MEMORY_H
19#define TRINITY_MEMORY_H
25#if TRINITY_COMPILER == TRINITY_COMPILER_GNU
26#pragma GCC diagnostic push
27#pragma GCC diagnostic ignored "-Wignored-attributes"
34template<
typename T,
typename Del>
45template<
typename T, auto Del>
51 if constexpr (std::is_member_function_pointer_v<
decltype(Del)>)
78template <
typename Ptr,
typename Del>
requires std::invocable<Del, Ptr> && std::is_pointer_v<Ptr>
101template <
typename Ptr, auto Del>
requires std::invocable<
decltype(Del),
Ptr> && std::is_pointer_v<Ptr>
132template<
typename Ptr,
typename T = std::remove_po
inter_t<Ptr>,
typename Del>
requires std::invocable<Del, Ptr> && std::is_pointer_v<Ptr>
135 return std::unique_ptr<T, Impl::stateful_unique_ptr_deleter<Ptr, Del>>(ptr, std::move(deleter));
163template<auto Del,
typename Ptr,
typename T = std::remove_po
inter_t<Ptr>>
requires std::invocable<
decltype(Del),
Ptr> && std::is_pointer_v<Ptr>
166 return std::unique_ptr<T, Impl::stateless_unique_ptr_deleter<Ptr, Del>>(ptr);
170#if TRINITY_COMPILER == TRINITY_COMPILER_GNU
171#pragma GCC diagnostic pop
std::unique_ptr< T, Impl::stateful_unique_ptr_deleter< Ptr, Del > > make_unique_ptr_with_deleter(Ptr ptr, Del deleter)
Impl::stateful_unique_ptr_deleter< Ptr, Del > unique_ptr_deleter(Del deleter)
void operator()(pointer ptr) const
void operator()(pointer ptr) const