From 907ead2948f8a7302e34d5c6194a27b129dc2785 Mon Sep 17 00:00:00 2001 From: Gary Talent Date: Fri, 22 Dec 2023 04:41:39 -0600 Subject: [PATCH] [ox/std] Fix Optional deref operator, in_place constructor --- deps/ox/src/ox/std/optional.hpp | 12 ++++++------ deps/ox/src/ox/std/utility.hpp | 6 ++++++ 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/deps/ox/src/ox/std/optional.hpp b/deps/ox/src/ox/std/optional.hpp index fa8ed74b..1a8fb3b2 100644 --- a/deps/ox/src/ox/std/optional.hpp +++ b/deps/ox/src/ox/std/optional.hpp @@ -28,7 +28,7 @@ class Optional { constexpr Optional() noexcept = default; template - explicit constexpr Optional(Args &&... args); + explicit constexpr Optional(ox::in_place_t, Args &&... args); constexpr Optional(const Optional &other) { if (other.m_ptr) { @@ -65,19 +65,19 @@ class Optional { } constexpr T &operator*() & noexcept { - return m_ptr; + return *m_ptr; } constexpr const T &operator*() const & noexcept { - return m_ptr; + return *m_ptr; } constexpr T &&operator*() && noexcept { - return m_ptr; + return *m_ptr; } constexpr const T &&operator*() const && noexcept { - return m_ptr; + return *m_ptr; } constexpr T *operator->() noexcept { @@ -163,7 +163,7 @@ class Optional { template template -constexpr Optional::Optional(Args &&... args) { +constexpr Optional::Optional(ox::in_place_t, Args &&... args) { emplace(ox::forward(args)...); } diff --git a/deps/ox/src/ox/std/utility.hpp b/deps/ox/src/ox/std/utility.hpp index eea97684..1527261d 100644 --- a/deps/ox/src/ox/std/utility.hpp +++ b/deps/ox/src/ox/std/utility.hpp @@ -12,6 +12,12 @@ namespace ox { +struct in_place_t { + explicit constexpr in_place_t() = default; +}; + +inline constexpr ox::in_place_t in_place; + template constexpr T &&forward(remove_reference_t &t) noexcept { return static_cast(t);