diff --git a/include/cereal/types/variant.hpp b/include/cereal/types/variant.hpp index 8bea397b..adb134db 100644 --- a/include/cereal/types/variant.hpp +++ b/include/cereal/types/variant.hpp @@ -54,25 +54,24 @@ namespace cereal }; //! @internal - template + template typename std::enable_if, void>::type load_variant(Archive & /*ar*/, int /*target*/, Variant & /*variant*/) { throw ::cereal::Exception("Error traversing variant during load"); } //! @internal - template + template typename std::enable_if, void>::type load_variant(Archive & ar, int target, Variant & variant) { if(N == target) { - H value; - ar( CEREAL_NVP_("data", value) ); - variant = std::move(value); + variant.template emplace(); + ar( CEREAL_NVP_("data", std::get(variant)) ); } else - load_variant(ar, target, variant); + load_variant(ar, target, variant); } } // namespace variant_detail @@ -98,7 +97,7 @@ namespace cereal if(index >= static_cast(std::variant_size_v)) throw Exception("Invalid 'index' selector when deserializing std::variant"); - variant_detail::load_variant<0, variant_t, VariantTypes...>(ar, index, variant); + variant_detail::load_variant<0>(ar, index, variant); } //! Serializing a std::monostate