From f0b602961d3f29e3f79e0f35379f4982b6ffa84a Mon Sep 17 00:00:00 2001 From: Jan Travnicek <Jan.Travnicek@fit.cvut.cz> Date: Tue, 11 Apr 2017 15:23:51 +0200 Subject: [PATCH] test variant movability --- alib2std/src/extensions/variant.hpp | 9 +++++++-- alib2std/test-src/extensions/VariantTest.cpp | 5 +++++ alib2std/test-src/extensions/VariantTest.h | 2 ++ 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/alib2std/src/extensions/variant.hpp b/alib2std/src/extensions/variant.hpp index b6027894bb..e7a6e82be6 100644 --- a/alib2std/src/extensions/variant.hpp +++ b/alib2std/src/extensions/variant.hpp @@ -242,8 +242,13 @@ public: helper_t::move(old.type_id, &old.data, &this->data); } - //assignment operator - variant<Ts...>& operator= (variant<Ts...> old) noexcept { + // copy assignment operator + variant<Ts...>& operator =( const variant<Ts...> & other ) { + return this->operator =( variant <Ts...> ( other ) ); + } + + // move assignment operator + variant<Ts...>& operator= (variant<Ts...> && old) noexcept { std::swap(this->type_id, old.type_id); std::swap(this->data, old.data); diff --git a/alib2std/test-src/extensions/VariantTest.cpp b/alib2std/test-src/extensions/VariantTest.cpp index 6d7372f346..5d28736c61 100644 --- a/alib2std/test-src/extensions/VariantTest.cpp +++ b/alib2std/test-src/extensions/VariantTest.cpp @@ -168,3 +168,8 @@ void VariantTest::testSizeT() { CPPUNIT_ASSERT ( b.is < int > ( ) ); CPPUNIT_ASSERT ( c.is < void > ( ) ); } + +void VariantTest::testMoveSemantics() { + CPPUNIT_ASSERT ( ( std::is_nothrow_move_constructible < std::variant < void, int, size_t > >::value ) ); + CPPUNIT_ASSERT ( ( std::is_move_constructible < std::variant < void, int, size_t > >::value && std::is_move_assignable < std::variant < void, int, size_t > >::value ) ); +} diff --git a/alib2std/test-src/extensions/VariantTest.h b/alib2std/test-src/extensions/VariantTest.h index c4f07ed6f1..2091477045 100644 --- a/alib2std/test-src/extensions/VariantTest.h +++ b/alib2std/test-src/extensions/VariantTest.h @@ -14,6 +14,7 @@ class VariantTest : public CppUnit::TestFixture CPPUNIT_TEST( testVariantDefault ); CPPUNIT_TEST( testVariantSameTypes ); CPPUNIT_TEST( testSizeT ); + CPPUNIT_TEST( testMoveSemantics ); CPPUNIT_TEST_SUITE_END(); public: @@ -76,6 +77,7 @@ public: void testVariantDefault(); void testVariantSameTypes(); void testSizeT(); + void testMoveSemantics(); }; namespace std { -- GitLab