Merge pull request #478 from patrikhuber/variant-fixed-size-index

Changed serialised index type of std::variant to std::int32_t
This commit is contained in:
Shane Grant
2018-03-17 15:36:31 -07:00
committed by GitHub
+4 -3
View File
@@ -32,6 +32,7 @@
#include "cereal/cereal.hpp"
#include <variant>
#include <cstdint>
namespace cereal
{
@@ -80,7 +81,7 @@ namespace cereal
template <class Archive, typename VariantType1, typename... VariantTypes> inline
void CEREAL_SAVE_FUNCTION_NAME( Archive & ar, std::variant<VariantType1, VariantTypes...> const & variant )
{
auto index = variant.index();
std::int32_t index = static_cast<std::int32_t>(variant.index());
ar( CEREAL_NVP_("index", index) );
variant_detail::variant_save_visitor<Archive> visitor(ar);
std::visit(visitor, variant);
@@ -92,9 +93,9 @@ namespace cereal
{
using variant_t = typename std::variant<VariantTypes...>;
decltype(variant.index()) index;
std::int32_t index;
ar( CEREAL_NVP_("index", index) );
if(index >= std::variant_size_v<variant_t>)
if(index >= static_cast<std::int32_t>(std::variant_size_v<variant_t>))
throw Exception("Invalid 'index' selector when deserializing std::variant");
variant_detail::load_variant<0, variant_t, VariantTypes...>(ar, index, variant);