Skip to content

Commit c593c32

Browse files
authored
Merge pull request #1112 from uyha/same-type-variant
Fix compilation error when `std::variant` has the same types
2 parents e9e06a5 + d812fa5 commit c593c32

File tree

2 files changed

+24
-2
lines changed

2 files changed

+24
-2
lines changed

include/msgpack/v1/adaptor/cpp17/variant.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,11 @@ Variant construct_variant(
4040
std::index_sequence<current_index, indices...>
4141
) {
4242
if constexpr(sizeof...(Ts) == 0) {
43-
return object.as<T>();
43+
return Variant{std::in_place_index<current_index>, object.as<T>()};
4444
}
4545
else {
4646
if (index == current_index) {
47-
return object.as<T>();
47+
return Variant{std::in_place_index<current_index>, object.as<T>()};
4848
}
4949
return construct_variant<Variant, Ts...>(
5050
index,

test/msgpack_cpp17.cpp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -474,6 +474,28 @@ BOOST_AUTO_TEST_CASE(variant_pack_unpack_as) {
474474
oh.get().as<std::variant<bool, int, float, double> >();
475475
BOOST_CHECK(val1 == val2);
476476
BOOST_CHECK_THROW((oh.get().as<std::variant<bool>>()), msgpack::type_error);
477+
478+
{
479+
std::stringstream same_ss;
480+
std::variant<int, float, int> same_expected{std::in_place_index<2>, 2};
481+
msgpack::pack(same_ss, same_expected);
482+
std::string const& same_str = same_ss.str();
483+
msgpack::object_handle same_oh =
484+
msgpack::unpack(same_str.data(), same_str.size());
485+
std::variant<int, float, int> same_actual = same_oh->as<std::variant<int, float, int>>();
486+
BOOST_CHECK(same_expected == same_actual);
487+
}
488+
489+
{
490+
std::stringstream same_ss;
491+
std::variant<int, int> same_expected{std::in_place_index<1>, 2};
492+
msgpack::pack(same_ss, same_expected);
493+
std::string const& same_str = same_ss.str();
494+
msgpack::object_handle same_oh =
495+
msgpack::unpack(same_str.data(), same_str.size());
496+
std::variant<int, int> same_actual = same_oh->as<std::variant<int, int>>();
497+
BOOST_CHECK(same_expected == same_actual);
498+
}
477499
}
478500

479501
BOOST_AUTO_TEST_CASE(variant_with_zone) {

0 commit comments

Comments
 (0)