diff options
Diffstat (limited to 'asl/option.hpp')
-rw-r--r-- | asl/option.hpp | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/asl/option.hpp b/asl/option.hpp index 6b528b9..f2af9ee 100644 --- a/asl/option.hpp +++ b/asl/option.hpp @@ -123,8 +123,8 @@ public: // NOLINTNEXTLINE(*-explicit-conversions)
constexpr option(nullopt_t) requires (!kHasNiche)
- : m_has_value{false}
- , m_payload{}
+ : m_payload{}
+ , m_has_value{false}
{}
// NOLINTNEXTLINE(*-explicit-conversions)
@@ -383,7 +383,18 @@ public: if constexpr (kHasNiche)
{
- m_payload = T(niche{});
+ if constexpr (move_assignable<T>)
+ {
+ m_payload = T(niche{});
+ }
+ else
+ {
+ if constexpr (!trivially_destructible<T>)
+ {
+ (&m_payload)->~T();
+ }
+ new (&m_payload) T(niche{});
+ }
}
else
{
|