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(); };