Skip to content

Commit 0bbbb14

Browse files
kepler-5AzothAmmo
authored andcommitted
Use std::variant::emplace when loading
1 parent 46a4a91 commit 0bbbb14

File tree

1 file changed

+6
-7
lines changed

1 file changed

+6
-7
lines changed

include/cereal/types/variant.hpp

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -54,25 +54,24 @@ namespace cereal
5454
};
5555

5656
//! @internal
57-
template<int N, class Variant, class ... Args, class Archive>
57+
template<int N, class Variant, class Archive>
5858
typename std::enable_if<N == std::variant_size_v<Variant>, void>::type
5959
load_variant(Archive & /*ar*/, int /*target*/, Variant & /*variant*/)
6060
{
6161
throw ::cereal::Exception("Error traversing variant during load");
6262
}
6363
//! @internal
64-
template<int N, class Variant, class H, class ... T, class Archive>
64+
template<int N, class Variant, class Archive>
6565
typename std::enable_if<N < std::variant_size_v<Variant>, void>::type
6666
load_variant(Archive & ar, int target, Variant & variant)
6767
{
6868
if(N == target)
6969
{
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)) );
7372
}
7473
else
75-
load_variant<N+1, Variant, T...>(ar, target, variant);
74+
load_variant<N+1>(ar, target, variant);
7675
}
7776

7877
} // namespace variant_detail
@@ -98,7 +97,7 @@ namespace cereal
9897
if(index >= static_cast<std::int32_t>(std::variant_size_v<variant_t>))
9998
throw Exception("Invalid 'index' selector when deserializing std::variant");
10099

101-
variant_detail::load_variant<0, variant_t, VariantTypes...>(ar, index, variant);
100+
variant_detail::load_variant<0>(ar, index, variant);
102101
}
103102

104103
//! Serializing a std::monostate

0 commit comments

Comments
 (0)