/* ======================================== Copyright (C) 2024-2025 Amlal El Mahrouss, licensed under the Apache 2.0 license. ======================================== */ #pragma once #include namespace std::base_alloc { /// @brief allocate a new class. /// @tparam KindClass the class type to allocate. template inline KindClass* allocate(Args&&... args) { return new KindClass(forward(args)...); } /// @brief allocate a new class. /// @note aborts on error. /// @tparam KindClass the class type to allocate. template inline KindClass* allocate_nothrow(Args&&... args) noexcept { return allocate(forward(args)...); } /// @brief free a class. /// @tparam KindClass the class type to allocate. template inline void release(KindClass ptr) { if (!ptr) return; delete ptr; } /// @brief destroy and free a class. /// @note aborts on error. /// @tparam KindClass the class type to allocate. template inline void release_nothrow(KindClass ptr) noexcept { release(ptr); } } // namespace std::base_alloc