diff options
Diffstat (limited to 'include/fud_result.hpp')
-rw-r--r-- | include/fud_result.hpp | 30 |
1 files changed, 10 insertions, 20 deletions
diff --git a/include/fud_result.hpp b/include/fud_result.hpp index 88d0dc4..0394156 100644 --- a/include/fud_result.hpp +++ b/include/fud_result.hpp @@ -200,8 +200,7 @@ class [[nodiscard]] Result { [[nodiscard]] constexpr const T& getOkay() const& { fudAssert(isOkay()); - // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast) - return *reinterpret_cast<const T*>(m_data.data()); + return *std::bit_cast<const T*>(m_data.data()); } [[nodiscard]] constexpr const T& getOkayOr(const T& alternative) const& @@ -210,15 +209,13 @@ class [[nodiscard]] Result { // NOLINTNEXTLINE(bugprone-return-const-ref-from-parameter) return alternative; } - // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast) - return *reinterpret_cast<const T*>(m_data.data()); + return *std::bit_cast<const T*>(m_data.data()); } [[nodiscard]] constexpr const E& getError() const& { fudAssert(isError()); - // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast) - return *reinterpret_cast<const E*>(m_data.data()); + return *std::bit_cast<const E*>(m_data.data()); } [[nodiscard]] constexpr const E& getErrorOr(const E& alternative) const& @@ -227,15 +224,13 @@ class [[nodiscard]] Result { // NOLINTNEXTLINE(bugprone-return-const-ref-from-parameter) return alternative; } - // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast) - return *reinterpret_cast<const E*>(m_data.data()); + return *std::bit_cast<const E*>(m_data.data()); } [[nodiscard]] constexpr T&& takeOkay() { fudAssert(isOkay()); - // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast) - return std::move(*reinterpret_cast<T*>(m_data.data())); + return std::move(*std::bit_cast<T*>(m_data.data())); } [[nodiscard]] constexpr T&& takeOkayOr(T&& alternative) @@ -243,15 +238,13 @@ class [[nodiscard]] Result { if (!isOkay()) { return std::move(alternative); } - // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast) - return std::move(*reinterpret_cast<T*>(m_data.data())); + return std::move(*std::bit_cast<T*>(m_data.data())); } [[nodiscard]] constexpr E&& takeError() { fudAssert(isError()); - // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast) - return std::move(*reinterpret_cast<E*>(m_data.data())); + return std::move(*std::bit_cast<E*>(m_data.data())); } [[nodiscard]] constexpr E&& takeErrorOr(E&& alternative) @@ -259,8 +252,7 @@ class [[nodiscard]] Result { if (!isError()) { return std::move(alternative); } - // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast) - return std::move(*reinterpret_cast<E*>(m_data.data())); + return std::move(*std::bit_cast<E*>(m_data.data())); } private: @@ -307,12 +299,10 @@ class [[nodiscard]] Result { constexpr void destroy() noexcept { if (m_discriminant == Discriminant::Okay) { - // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast) - reinterpret_cast<T*>(m_data.data())->~T(); + std::bit_cast<T*>(m_data.data())->~T(); m_discriminant = Discriminant::Invalid; } else if (m_discriminant == Discriminant::Error) { - // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast) - reinterpret_cast<E*>(m_data.data())->~E(); + std::bit_cast<E*>(m_data.data())->~E(); m_discriminant = Discriminant::Invalid; } } |