summaryrefslogtreecommitdiff
path: root/include/mbgl/util/unique_any.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'include/mbgl/util/unique_any.hpp')
-rw-r--r--include/mbgl/util/unique_any.hpp16
1 files changed, 6 insertions, 10 deletions
diff --git a/include/mbgl/util/unique_any.hpp b/include/mbgl/util/unique_any.hpp
index d488930a03..c7dc8b38ea 100644
--- a/include/mbgl/util/unique_any.hpp
+++ b/include/mbgl/util/unique_any.hpp
@@ -135,15 +135,12 @@ private:
template <typename ValueType>
struct VTableHeap : public VTable {
void move(Storage&& src, Storage& dest) override {
- destroy(dest);
dest.dynamic = src.dynamic;
+ src.dynamic = nullptr;
}
void destroy(Storage& s) override {
- if (s.dynamic) {
- delete reinterpret_cast<ValueType*>(s.dynamic);
- }
- s.dynamic = nullptr;
+ delete reinterpret_cast<ValueType*>(s.dynamic);
}
const std::type_info& type() override {
@@ -154,9 +151,8 @@ private:
template <typename ValueType>
struct VTableStack : public VTable {
void move(Storage&& src, Storage& dest) override {
- auto srcValue = reinterpret_cast<ValueType&&>(src.stack);
- new (static_cast<void*>(&dest.stack)) ValueType(std::move(srcValue));
- srcValue.~ValueType();
+ new (&dest.stack) ValueType(std::move(reinterpret_cast<ValueType&>(src.stack)));
+ destroy(src);
}
void destroy(Storage& s) override {
@@ -178,13 +174,13 @@ private:
template <typename ValueType, typename _Vt>
std::enable_if_t<AllocateOnStack<_Vt>::value>
createStorage(ValueType&& value) {
- new (static_cast<void*>(&storage.stack)) _Vt(std::forward<ValueType>(value));
+ new (&storage.stack) _Vt(std::forward<ValueType>(value));
}
template <typename ValueType, typename _Vt>
std::enable_if_t<!AllocateOnStack<_Vt>::value>
createStorage(ValueType&& value) {
- storage.dynamic = static_cast<void*>(new _Vt(std::forward<ValueType>(value)));
+ storage.dynamic = new _Vt(std::forward<ValueType>(value));
}
template <typename ValueType>