#pragma once #include "compat/defs.hpp" #include #include namespace floormat::impl_handle { template class Pool { friend class impl_handle; static Pointer> make_pool(); static Page& find_page(); Array>> pages; size_t next_page_offset = 0; static Pointer> pool = make_pool(); public: fm_DECLARE_DELETED_COPY_MOVE_ASSIGNMENTS(Pool); explicit Pool(); ~Pool() noexcept; template requires requires (Xs&&... xs) { Obj{forward(xs)...}; } static impl_handle make_object(Xs&&... xs); }; } // namespace floormat::impl_handle