diff --git a/deps/ox/src/ox/std/new.hpp b/deps/ox/src/ox/std/new.hpp index c8084ca8..369311f8 100644 --- a/deps/ox/src/ox/std/new.hpp +++ b/deps/ox/src/ox/std/new.hpp @@ -50,6 +50,22 @@ constexpr T *make(Args &&...args) noexcept { #endif } +template +[[nodiscard]] +constexpr Result makeCatch(Args &&...args) noexcept { +#ifdef __cpp_exceptions + try { + return new T(ox::forward(args)...); + } catch (const ox::Exception &ex) { + return ex.toError(); + } catch (...) { + return OxError(1, "Allocation or constructor failed"); + } +#else + return new T(ox::forward(args)...); +#endif +} + constexpr auto MallocaStackLimit = defines::UseStdLib ? 1024 : 0; /**