28#include <boost/serialization/split_free.hpp>
32namespace boost::serialization {
40 template <
typename Archive>
struct variant_serialize_saver {
42 variant_serialize_saver(Archive &ar) : ar(ar) {}
43 template <
typename T>
void operator()(T x) { ar << x; }
47 template <
typename Archive>
struct variant_serialize_loader {
50 variant_serialize_loader(Archive &ar,
bool initialize) : ar(ar), initialize(initialize) {}
52 if (initialize) ::new (&x) T();
68 template <
typename Archive,
typename... Ts>
void save(Archive &ar, std::variant<Ts...>
const &v, [[maybe_unused]]
const unsigned int version) {
70 visit(variant_serialize_saver<Archive>(ar), v);
84 template <
typename Archive,
typename... Ts>
void load(Archive &ar, std::variant<Ts...> &v, [[maybe_unused]]
const unsigned int version) {
87 if (v.type_id != new_type_id) {
89 v.type_id = new_type_id;
90 visit(variant_serialize_loader<Archive>(ar,
true), v);
92 visit(variant_serialize_loader<Archive>(ar,
false), v);
const_view_type operator()() const
Make a const view of *this.
void load(Archive &ar, std::variant< Ts... > &v, const unsigned int version)
Deserialize a std::variant.
void save(Archive &ar, std::variant< Ts... > const &v, const unsigned int version)
Serialize a std::variant.