diff --git a/include/sdbus-c++/TypeTraits.h b/include/sdbus-c++/TypeTraits.h index fafe950..e9143fa 100644 --- a/include/sdbus-c++/TypeTraits.h +++ b/include/sdbus-c++/TypeTraits.h @@ -151,6 +151,10 @@ namespace sdbus { struct signature_of<_T&> : signature_of<_T> {}; + template + struct signature_of<_T&&> : signature_of<_T> + {}; + template <> struct signature_of { diff --git a/tests/unittests/Types_test.cpp b/tests/unittests/Types_test.cpp index 647bc0b..995f091 100644 --- a/tests/unittests/Types_test.cpp +++ b/tests/unittests/Types_test.cpp @@ -97,6 +97,29 @@ TEST(AVariant, CanBeCopied) ASSERT_THAT(variantCopy2.get(), Eq(value)); } +TEST(AVariant, CanBeMoved) +{ + auto value = "hello"s; + sdbus::Variant variant(value); + + auto movedVariant{std::move(variant)}; + + ASSERT_THAT(movedVariant.get(), Eq(value)); + ASSERT_TRUE(variant.isEmpty()); +} + +TEST(AVariant, CanBeMovedIntoAMap) +{ + auto value = "hello"s; + sdbus::Variant variant(value); + + std::map mymap; + mymap.try_emplace("payload", std::move(variant)); + + ASSERT_THAT(mymap["payload"].get(), Eq(value)); + ASSERT_TRUE(variant.isEmpty()); +} + TEST(AVariant, IsNotEmptyWhenContainsAValue) { sdbus::Variant v("hello");