diff --git a/include/rfl/parsing/Parser_rfl_variant.hpp b/include/rfl/parsing/Parser_rfl_variant.hpp index 88d6d71a..c205f60f 100644 --- a/include/rfl/parsing/Parser_rfl_variant.hpp +++ b/include/rfl/parsing/Parser_rfl_variant.hpp @@ -57,7 +57,7 @@ class Parser, ProcessorsType> { using FieldVariantType = rfl::Variant...>; const auto from_field_variant = - [](const auto& _field) -> rfl::Variant { + [](auto&& _field) -> rfl::Variant { return std::move(_field.value()); }; return Parser::read(_r, _var) diff --git a/tests/json/test_add_tag_to_rfl_variant.cpp b/tests/json/test_add_tag_to_rfl_variant.cpp index 66c7d7e9..265f72bb 100644 --- a/tests/json/test_add_tag_to_rfl_variant.cpp +++ b/tests/json/test_add_tag_to_rfl_variant.cpp @@ -12,7 +12,10 @@ namespace test_add_tag_to_rfl_variant { struct button_pressed_t {}; -struct button_released_t {}; +// Test that we can still use structs that must be moved +struct button_released_t { + rfl::Box button; +}; struct key_pressed_t { using Tag = rfl::Literal<"key_pressed">; @@ -23,11 +26,14 @@ using my_event_type_t = rfl::Variant; TEST(json, test_add_tag_to_rfl_variant) { - const auto vec = std::vector( - {button_pressed_t{}, button_released_t{}, key_pressed_t{'c'}, 3}); + std::vector vec; + vec.emplace_back(button_pressed_t{}); + vec.emplace_back(button_released_t{rfl::make_box(4)}); + vec.emplace_back(key_pressed_t{'c'}); + vec.emplace_back(3); write_and_read( vec, - R"([{"button_pressed_t":{}},{"button_released_t":{}},{"key_pressed":{"key":99}},{"int":3}])"); + R"([{"button_pressed_t":{}},{"button_released_t":{"button":4}},{"key_pressed":{"key":99}},{"int":3}])"); } } // namespace test_add_tag_to_rfl_variant