28 template <
typename Resource,
typename T,
typename DefaultResource =
void>
43 template <
typename D =
void>
44 requires( std::is_invocable_r_v<Resource*, DefaultResource> )
61 m_resource->deallocate(
reinterpret_cast<std::byte*
>( p ), n *
sizeof( T ) );
80 template <
typename,
typename,
typename>
86 template <
typename Resource,
typename T,
typename U,
typename DefaultResource>
89 return !( lhs == rhs );
constexpr bool operator!=(Arena< Resource, T, DefaultResource > const &lhs, Arena< Resource, U, DefaultResource > const &rhs)
Arena< Resource, U, DefaultResource > other
Custom allocator holding a pointer to a generic memory resource.
friend constexpr bool operator==(Arena const &lhs, Arena< Resource, U, DefaultResource > const &rhs)
Resource * resource() const noexcept
std::true_type propagate_on_container_swap
constexpr Arena(Resource *resource) noexcept
Construct an allocator using the given memory resource, which must be valid.
constexpr Arena(Arena< Resource, U, DefaultResource > const &other) noexcept
Converting copy constructor, rebinding U -> T.
Arena()
Construct an allocator using the resource provided by DefaultResource.
T * allocate(std::size_t n)
Allocate storage for n objects.
std::true_type propagate_on_container_copy_assignment
void deallocate(T *p, std::size_t n) noexcept
Deallocate storage for n objects.
std::true_type propagate_on_container_move_assignment