diff --git a/alib2std/src/extensions/variant.hpp b/alib2std/src/extensions/variant.hpp
index 112d100f89cc834c83d3c6f5647df4dea1baba26..25c1907e05e564fee316eefbb3c441cbbd7fd11e 100644
--- a/alib2std/src/extensions/variant.hpp
+++ b/alib2std/src/extensions/variant.hpp
@@ -157,6 +157,8 @@ protected:
 public:
 	variant_base(const F& value) : variant_base<ST, AT, Ts...>::variant_base ( typeid(F).hash_code() ) { new (&this->data) F(value); }
 	variant_base(F&& value) : variant_base<ST, AT, Ts...>::variant_base ( typeid(F).hash_code() ) { new (&this->data) F(std::move(value)); }
+
+	variant_base() : variant_base<ST, AT, Ts ... >::variant_base ( ) { }
 };
 
 template<typename ST, typename AT, typename... Ts>
@@ -304,12 +306,12 @@ public:
 	}
 
 	template < typename T >
-	static typename std::enable_if < std::is_base_of_any<T, Ts...>::value && ! std::is_same < void, T >::value, variant < Ts ... > >::type from ( ) {
-		return variant < Ts ... >( T ( ) );
+	static typename std::enable_if < ! std::is_same < void, T >::value, variant < Ts ... > >::type from ( ) {
+		return variant < Ts ... >( T { } );
 	}
 
 	template < typename T >
-	static typename std::enable_if < std::is_base_of_any<T, Ts...>::value &&   std::is_same < void, T >::value, variant < Ts ... > >::type from ( ) {
+	static typename std::enable_if <   std::is_same < void, T >::value, variant < Ts ... > >::type from ( ) {
 		return variant < Ts ... >( );
 	}
 };
diff --git a/alib2std/test-src/extensions/VariantTest.cpp b/alib2std/test-src/extensions/VariantTest.cpp
index 3bdc968803a52504a46008db3538062e0e997bea..0e1817204566079c23527237536fc6ab120c5379 100644
--- a/alib2std/test-src/extensions/VariantTest.cpp
+++ b/alib2std/test-src/extensions/VariantTest.cpp
@@ -126,10 +126,21 @@ void VariantTest::testVariantVoid() {
 	v = 10;
 
 	CPPUNIT_ASSERT ( v.get<int>() == 10 );
+
+	std::variant<int, void> v2;
+	CPPUNIT_ASSERT ( v2.is < void > ( ) );
 }
 
 void VariantTest::testVariantDefault() {
-	std::variant<int, std::string> v = std::variant<int, std::string>::from<std::string>();
+	std::variant<int, std::string, void> v1 = std::variant<int, std::string, void>::from<std::string>();
+
+	CPPUNIT_ASSERT ( v1.get<std::string>() == "");
+
+	std::variant<int, std::string, void> v2 = std::variant<int, std::string, void>::from<void>();
+
+	CPPUNIT_ASSERT ( v2.is<void> ( ) );
+
+	std::variant<int, std::string, void> v3 = std::variant<int, std::string, void>::from<int>();
 
-	CPPUNIT_ASSERT ( v.get<std::string>() == "");
+	CPPUNIT_ASSERT ( v3.get<int> ( ) == 0 );
 }