diff --git a/alib2std/src/extensions/type_traits.hpp b/alib2std/src/extensions/type_traits.hpp
index 248894d231fd602de2d71a1263372aee0abfa97e..6467d35c8f3f262fc4a4923ee9a8fa23c13c97b0 100644
--- a/alib2std/src/extensions/type_traits.hpp
+++ b/alib2std/src/extensions/type_traits.hpp
@@ -35,28 +35,6 @@ namespace std {
 		static const bool value = sizeof(Yes) == sizeof(has_normalize::test((typename std::remove_reference<T>::type*)0));
 	};
 
-// ----------------------------------------------------------------------------------------------------
-
-	template <typename T>
-	struct is_base_of<T, T> {
-		static const bool value = true;
-	};
-
-	template <typename T, typename... Ts>
-	struct is_base_of_any;
-
-	template <typename T, typename F>
-	struct is_base_of_any<T, F>
-	{
-		static const bool value = is_base_of<T, F>::value;
-	};
-
-	template <typename T, typename F, typename... Ts>
-	struct is_base_of_any<T, F, Ts...>
-	{
-		static const bool value = is_base_of<T, F>::value || is_base_of_any<T, Ts...>::value;
-	};
-
 // ----------------------------------------------------------------------------------------------------
 
 	template < size_t N, typename ... T >
diff --git a/alib2std/src/extensions/variant.hpp b/alib2std/src/extensions/variant.hpp
index 4527ec7a6c7c0e769240acb1f69ee3c802dd424c..545dcad15fff4a467423ce8af4e77ffa82fdb489 100644
--- a/alib2std/src/extensions/variant.hpp
+++ b/alib2std/src/extensions/variant.hpp
@@ -238,7 +238,7 @@ class variant : public variant_base<static_max<SizeOf<Ts>::size...>, static_max<
 public:
 	using variant_base<static_max<SizeOf<Ts>::size...>, static_max<AlignOf<Ts>::align...>, Ts...>::variant_base;
 
-	template < typename = std::enable_if < std::is_base_of_any<void, Ts...>::value > >
+	template < typename = std::enable_if < std::is_in<void, Ts...>::value > >
 	variant ( ) : variant_base<static_max<SizeOf<Ts>::size...>, static_max<AlignOf<Ts>::align...>, Ts...> ( ) {
 	}
 
@@ -296,32 +296,32 @@ public:
 		return helper_t::compareHelper(this->type_id, &this->data, other.type_id, &other.data);
 	}
 
-	template<typename T, typename = std::enable_if < std::is_base_of_any<T, Ts...>::value > >
+	template<typename T, typename = std::enable_if < std::is_in<T, Ts...>::value > >
 	bool is() const {
 		return (this->type_id == typeid(T).hash_code());
 	}
 
-	template<typename = std::enable_if < std::is_base_of_any<void, Ts...>::value > >
+	template<typename = std::enable_if < std::is_in<void, Ts...>::value > >
 	void set ( ) {
 		helper_t::destroy(this->type_id, &this->data);
 		this->type_id = typeid(void).hash_code();
 	}
 
-	template<typename T, typename = std::enable_if < std::is_base_of_any<T, Ts...>::value && ! std::is_same < void, T >::value > >
+	template<typename T, typename = std::enable_if < std::is_in<T, Ts...>::value && ! std::is_same < void, T >::value > >
 	void set(T&& value) {
 		helper_t::destroy(this->type_id, &this->data);
 		new (&this->data) T(value);
 		this->type_id = typeid(T).hash_code();
 	}
 
-	template<typename T, typename = std::enable_if < std::is_base_of_any<T, Ts...>::value && ! std::is_same < void, T >::value > >
+	template<typename T, typename = std::enable_if < std::is_in<T, Ts...>::value && ! std::is_same < void, T >::value > >
 	void set(const T& value) {
 		helper_t::destroy(this->type_id, &this->data);
 		new (&this->data) T(std::move(value));
 		this->type_id = typeid(T).hash_code();
 	}
 
-	template<typename T, typename = std::enable_if < std::is_base_of_any<T, Ts...>::value && ! std::is_same < void, T >::value > >
+	template<typename T, typename = std::enable_if < std::is_in<T, Ts...>::value && ! std::is_same < void, T >::value > >
 	T& get() {
 		// It is a dynamic_cast-like behaviour
 		if (this->type_id == typeid(T).hash_code())
@@ -330,7 +330,7 @@ public:
 			throw std::bad_cast();
 	}
 
-	template<typename T, typename = std::enable_if < std::is_base_of_any<T, Ts...>::value && ! std::is_same < void, T >::value > >
+	template<typename T, typename = std::enable_if < std::is_in<T, Ts...>::value && ! std::is_same < void, T >::value > >
 	const T& get() const {
 		// It is a dynamic_cast-like behaviour
 		if (this->type_id == typeid(T).hash_code())
diff --git a/alib2std/test-src/extensions/TypeTraitsTest.cpp b/alib2std/test-src/extensions/TypeTraitsTest.cpp
index 5790deafa87352c899211b960450cde77856c78d..52c905dcc0895cb8639680f7ed67a6c5fb8bba22 100644
--- a/alib2std/test-src/extensions/TypeTraitsTest.cpp
+++ b/alib2std/test-src/extensions/TypeTraitsTest.cpp
@@ -10,13 +10,6 @@ void TypeTraitsTest::setUp() {
 void TypeTraitsTest::tearDown() {
 }
 
-void TypeTraitsTest::testIsBaseOf() {
-	CPPUNIT_ASSERT( ( std::is_base_of_any<int, int, std::string, TypeTraitsTest::test>::value ) == true );
-	CPPUNIT_ASSERT( ( std::is_base_of<int, int>::value ) == true );
-	CPPUNIT_ASSERT( ( std::is_base_of<int, std::string>::value ) == false );
-	CPPUNIT_ASSERT( ( std::is_base_of<int, TypeTraitsTest::test>::value ) == false );
-}
-
 void TypeTraitsTest::testAccessPackElement() {
 	CPPUNIT_ASSERT( ( std::is_same< std::get_type_pack_element < 0, int, double >::type, int >::value ) == true );
 }
diff --git a/alib2std/test-src/extensions/TypeTraitsTest.h b/alib2std/test-src/extensions/TypeTraitsTest.h
index cf968249c11283d662e71550bff80caa57cd8af1..84a41ae0e72917b3e92a3eb2b0c4ad5b1587ee45 100644
--- a/alib2std/test-src/extensions/TypeTraitsTest.h
+++ b/alib2std/test-src/extensions/TypeTraitsTest.h
@@ -6,7 +6,6 @@
 class TypeTraitsTest : public CppUnit::TestFixture
 {
   CPPUNIT_TEST_SUITE( TypeTraitsTest );
-  CPPUNIT_TEST( testIsBaseOf );
   CPPUNIT_TEST( testAccessPackElement );
   CPPUNIT_TEST( testTypeInPack );
   CPPUNIT_TEST_SUITE_END();
@@ -64,7 +63,6 @@ public:
   void setUp();
   void tearDown();
 
-  void testIsBaseOf();
   void testAccessPackElement();
   void testTypeInPack();
 };