/** * @file Alloc.h * @author apio (cloudapio.eu) * @brief Fallible version of new. * * @copyright Copyright (c) 2022-2023, the Luna authors. * */ #pragma once #include #include #include /** * @brief Allocate a value on the heap and initialize it. * * When this value is no longer used, you must call delete to destroy it. * * @tparam T The type of the value. * @tparam Args The types of arguments to pass to the value's constructor. * @param args The arguments to pass to the value's constructor. * @return Result An error, or a pointer to the new value. */ template [[nodiscard]] Result make(Args... args) { T* const result = (T*)TRY(malloc_impl(sizeof(T), false, false)); new (result) T(args...); return result; }