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