@@ -54,25 +54,24 @@ namespace cereal
54
54
};
55
55
56
56
// ! @internal
57
- template <int N, class Variant , class ... Args, class Archive >
57
+ template <int N, class Variant , class Archive >
58
58
typename std::enable_if<N == std::variant_size_v<Variant>, void >::type
59
59
load_variant (Archive & /* ar*/ , int /* target*/ , Variant & /* variant*/ )
60
60
{
61
61
throw ::cereal::Exception (" Error traversing variant during load" );
62
62
}
63
63
// ! @internal
64
- template <int N, class Variant , class H , class ... T, class Archive >
64
+ template <int N, class Variant , class Archive >
65
65
typename std::enable_if<N < std::variant_size_v<Variant>, void >::type
66
66
load_variant (Archive & ar, int target, Variant & variant)
67
67
{
68
68
if (N == target)
69
69
{
70
- H value;
71
- ar ( CEREAL_NVP_ (" data" , value) );
72
- variant = std::move (value);
70
+ variant.template emplace <N>();
71
+ ar ( CEREAL_NVP_ (" data" , std::get<N>(variant)) );
73
72
}
74
73
else
75
- load_variant<N+1 , Variant, T... >(ar, target, variant);
74
+ load_variant<N+1 >(ar, target, variant);
76
75
}
77
76
78
77
} // namespace variant_detail
@@ -98,7 +97,7 @@ namespace cereal
98
97
if (index >= static_cast <std::int32_t >(std::variant_size_v<variant_t >))
99
98
throw Exception (" Invalid 'index' selector when deserializing std::variant" );
100
99
101
- variant_detail::load_variant<0 , variant_t , VariantTypes... >(ar, index, variant);
100
+ variant_detail::load_variant<0 >(ar, index, variant);
102
101
}
103
102
104
103
// ! Serializing a std::monostate
0 commit comments