summaryrefslogtreecommitdiff
path: root/include/fud_result.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'include/fud_result.hpp')
-rw-r--r--include/fud_result.hpp30
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;
}
}