From b6b9837bbf728e2d8c1865962cae03f8a08c9074 Mon Sep 17 00:00:00 2001 From: Gary Talent Date: Fri, 23 Jul 2021 03:30:00 -0500 Subject: [PATCH] [ox/std] Fix Vector::emplace_back and make_unique to properly forward arguments --- deps/ox/src/ox/std/memory.hpp | 4 +++- deps/ox/src/ox/std/vector.hpp | 10 +++++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/deps/ox/src/ox/std/memory.hpp b/deps/ox/src/ox/std/memory.hpp index a8e19db3..8a2158c7 100644 --- a/deps/ox/src/ox/std/memory.hpp +++ b/deps/ox/src/ox/std/memory.hpp @@ -29,6 +29,8 @@ class UniquePtr { explicit constexpr UniquePtr(T *t = nullptr) noexcept: m_t(t) { } + constexpr UniquePtr(UniquePtr&) = delete; + constexpr UniquePtr(const UniquePtr&) = delete; template @@ -114,7 +116,7 @@ constexpr bool operator!=(std::nullptr_t, const UniquePtr &p2) noexcept { template [[nodiscard]] constexpr auto make_unique(Args&&... args) { - return UniquePtr(new T(args...)); + return UniquePtr(new T(static_cast(args)...)); } } diff --git a/deps/ox/src/ox/std/vector.hpp b/deps/ox/src/ox/std/vector.hpp index 8190e065..592bfa86 100644 --- a/deps/ox/src/ox/std/vector.hpp +++ b/deps/ox/src/ox/std/vector.hpp @@ -24,6 +24,10 @@ struct SmallVector { private: AllocAlias m_data[Size] = {}; + public: + SmallVector() noexcept = default; + SmallVector(SmallVector&) noexcept = default; + SmallVector(SmallVector&&) noexcept = default; protected: constexpr void initItems(T **items, std::size_t cap) noexcept { if (cap <= Size) { @@ -54,6 +58,10 @@ struct SmallVector { template struct SmallVector { + public: + SmallVector() noexcept = default; + SmallVector(SmallVector&) noexcept = default; + SmallVector(SmallVector&&) noexcept = default; protected: constexpr void initItems(T **items, std::size_t cap) noexcept { *items = bit_cast(new AllocAlias[cap]); @@ -480,7 +488,7 @@ void Vector::emplace_back(Args&&... args) { if (m_size == m_cap) { expandCap(m_cap ? m_cap * 2 : 100); } - new (&m_items[m_size]) T{args...}; + new (&m_items[m_size]) T{static_cast(args)...}; ++m_size; }