diff --git a/headers/meta.hpp/meta_utilities/value.hpp b/headers/meta.hpp/meta_utilities/value.hpp index cb3f1a2..e673d72 100644 --- a/headers/meta.hpp/meta_utilities/value.hpp +++ b/headers/meta.hpp/meta_utilities/value.hpp @@ -78,7 +78,7 @@ namespace meta_hpp if constexpr ( in_buffer ) { dst.storage_.emplace(); - std::construct_at(storage_cast(dst.storage_), std::forward(val)); + ::new (storage_cast(dst.storage_)) Tp(std::forward(val)); } else { dst.storage_.emplace(std::make_unique(std::forward(val)).release()); } @@ -132,9 +132,9 @@ namespace meta_hpp to.storage_.emplace(src); }, [&to](buffer_t& buffer) { - to.storage_.emplace(); - std::construct_at(storage_cast(to.storage_), std::move(*storage_cast(buffer))); - std::destroy_at(storage_cast(buffer)); + Tp* src = storage_cast(buffer); + ::new (&to.storage_.emplace()) Tp(std::move(*src)); + src->~Tp(); }, [](...){} }, from.storage_); @@ -150,8 +150,8 @@ namespace meta_hpp to.storage_.emplace(new Tp{*src}); }, [&to](const buffer_t& buffer) { - to.storage_.emplace(); - std::construct_at(storage_cast(to.storage_), *storage_cast(buffer)); + const Tp* src = storage_cast(buffer); + ::new (&to.storage_.emplace()) Tp(*src); }, [](...){} }, from.storage_); @@ -166,7 +166,7 @@ namespace meta_hpp std::unique_ptr{src}.reset(); }, [](buffer_t& buffer) { - std::destroy_at(storage_cast(buffer)); + storage_cast(buffer)->~Tp(); }, [](...){} }, self.storage_);