Concept CE::Memory::Objects::ReservableManager

template<typename Manager, typename T>
concept ReservableManager
    template<typename Manager, typename T>
    concept ReservableManager = requires(Manager& manager, std::size_t count, T* ptr) {
        typename Manager::release_context_type;
        requires std::derived_from<typename Manager::release_context_type, ::CE::Memory::AbstractBlockManager<T>>;
        { manager.retrieve_block(count) } -> std::same_as<::CE::Memory::Block<T>>;
        { manager.release_context() } -> std::same_as<std::shared_ptr<typename Manager::release_context_type>>;
        { std::declval<typename Manager::release_context_type&>().return_objects(ptr, count) } -> std::same_as<void>;
        { std::declval<typename Manager::release_context_type&>().release_owned(ptr, count) } -> std::same_as<void>;
    }

Manager interface for reserving blocks and retaining a context capable of returning their individual ranges.