Concept CE::Memory::Objects::ReservationAllocator

template<typename Allocator, typename T>
concept ReservationAllocator
    template<typename Allocator, typename T>
    concept ReservationAllocator = requires(Allocator& allocator, std::size_t count, T* ptr) {
        typename Allocator::value_type;
        typename Allocator::manager_type;
        requires std::same_as<typename Allocator::value_type, T>;
        requires ReservableManager<typename Allocator::manager_type, T>;
        { allocator.context() } -> std::same_as<std::shared_ptr<typename Allocator::manager_type::release_context_type>>;
        { allocator.allocate(count) } -> std::same_as<T*>;
        { allocator.deallocate(ptr, count) } -> std::same_as<void>;
    }

Allocator interface accepted by CE::Memory::Objects::Reservation: the allocator must identify a ReservableManager and expose its retained release context.

Ordinary allocate/deallocate still operate on whole allocations.