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