template class FixedAllocator { PageAllocator page_allocator_; std::uint64_t page_size; public: explicit FixedAllocator(std::uint64_t page_size) : page_size(page_size) {} Tp* Allocate() { Tp* p; try { p = new char[sizeof(Tp) * page_size]; } catch(...) { p = (Tp*)page_allocator_.Allocate(); } return p; } void Deallocate(Tp* p) { delete p; } const PageAllocator& InnerAllocator() const noexcept { return page_allocator_; } };