diff --git a/alib2std/src/extensions/variant.hpp b/alib2std/src/extensions/variant.hpp
index b6027894bb3f7c41e778fbef3a329b685e18ce37..e7a6e82be6c1fc32ed7207c1302a13c14d70f8bd 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 6d7372f346c3f613164add922599603378e79840..5d28736c61bbde86d9aa27d54fa7756d7a81b1a4 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 c4f07ed6f19b3d608ccc069922d1ea4b74a3a96d..20914770458aaa1d01d9b4325da38a4bb5a2697e 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 {