mirror of
https://github.com/msgpack/msgpack-c.git
synced 2025-04-26 18:11:30 +02:00
Fix compilation error when std::variant
has the same types
This commit is contained in:
parent
e9e06a546c
commit
d812fa5edc
@ -40,11 +40,11 @@ Variant construct_variant(
|
||||
std::index_sequence<current_index, indices...>
|
||||
) {
|
||||
if constexpr(sizeof...(Ts) == 0) {
|
||||
return object.as<T>();
|
||||
return Variant{std::in_place_index<current_index>, object.as<T>()};
|
||||
}
|
||||
else {
|
||||
if (index == current_index) {
|
||||
return object.as<T>();
|
||||
return Variant{std::in_place_index<current_index>, object.as<T>()};
|
||||
}
|
||||
return construct_variant<Variant, Ts...>(
|
||||
index,
|
||||
|
@ -474,6 +474,28 @@ BOOST_AUTO_TEST_CASE(variant_pack_unpack_as) {
|
||||
oh.get().as<std::variant<bool, int, float, double> >();
|
||||
BOOST_CHECK(val1 == val2);
|
||||
BOOST_CHECK_THROW((oh.get().as<std::variant<bool>>()), msgpack::type_error);
|
||||
|
||||
{
|
||||
std::stringstream same_ss;
|
||||
std::variant<int, float, int> same_expected{std::in_place_index<2>, 2};
|
||||
msgpack::pack(same_ss, same_expected);
|
||||
std::string const& same_str = same_ss.str();
|
||||
msgpack::object_handle same_oh =
|
||||
msgpack::unpack(same_str.data(), same_str.size());
|
||||
std::variant<int, float, int> same_actual = same_oh->as<std::variant<int, float, int>>();
|
||||
BOOST_CHECK(same_expected == same_actual);
|
||||
}
|
||||
|
||||
{
|
||||
std::stringstream same_ss;
|
||||
std::variant<int, int> same_expected{std::in_place_index<1>, 2};
|
||||
msgpack::pack(same_ss, same_expected);
|
||||
std::string const& same_str = same_ss.str();
|
||||
msgpack::object_handle same_oh =
|
||||
msgpack::unpack(same_str.data(), same_str.size());
|
||||
std::variant<int, int> same_actual = same_oh->as<std::variant<int, int>>();
|
||||
BOOST_CHECK(same_expected == same_actual);
|
||||
}
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(variant_with_zone) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user