diff options
Diffstat (limited to 'include/fud_option.hpp')
-rw-r--r-- | include/fud_option.hpp | 28 |
1 files changed, 15 insertions, 13 deletions
diff --git a/include/fud_option.hpp b/include/fud_option.hpp index 5a5611f..f2e86ca 100644 --- a/include/fud_option.hpp +++ b/include/fud_option.hpp @@ -172,11 +172,9 @@ class Option { { fudAssert(m_engaged); if constexpr (IsRef) { - // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast) - return *reinterpret_cast<const std::reference_wrapper<ValueType>*>(m_data.data()); + return *std::bit_cast<const std::reference_wrapper<ValueType>*>(m_data.data()); } else { - // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast) - return *reinterpret_cast<const ValueType*>(m_data.data()); + return *std::bit_cast<const ValueType*>(m_data.data()); } } @@ -184,11 +182,9 @@ class Option { { fudAssert(m_engaged); if constexpr (IsRef) { - // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast) - return *reinterpret_cast<std::reference_wrapper<ValueType>*>(m_data.data()); + return *std::bit_cast<std::reference_wrapper<ValueType>*>(m_data.data()); } else { - // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast) - return *reinterpret_cast<ValueType*>(m_data.data()); + return *std::bit_cast<ValueType*>(m_data.data()); } } @@ -196,8 +192,15 @@ class Option { { fudAssert(m_engaged); static_assert(!IsRef); - // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast) - return std::move(*reinterpret_cast<const ValueType*>(m_data.data())); + return std::move(*std::bit_cast<const ValueType*>(m_data.data())); + } + + [[nodiscard]] ValueType& mutValueOr(ValueType& alternative) + { + if (m_engaged) { + return value(); + } + return alternative; } [[nodiscard]] constexpr const ValueType& valueOr(const ValueType& alternative) const& @@ -232,10 +235,9 @@ class Option { { if (m_engaged) { if constexpr (IsRef) { - // reinterpret_cast<std::reference_wrapper<ValueType>*>(m_data.data()); + // do nothing } else { - // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast) - reinterpret_cast<ValueType*>(m_data.data())->~ValueType(); + std::bit_cast<ValueType*>(m_data.data())->~ValueType(); } cleanup(); } |