Browse Source

type_traits: try to please older compilers too

Michele Caini 2 years ago
parent
commit
7a2c5753c5
1 changed files with 9 additions and 3 deletions
  1. 9 3
      src/entt/core/type_traits.hpp

+ 9 - 3
src/entt/core/type_traits.hpp

@@ -783,19 +783,25 @@ template<typename Type>
 [[nodiscard]] constexpr bool dispatch_is_equality_comparable() {
     if constexpr(std::is_array_v<Type>) {
         return false;
-    } else if constexpr(has_tuple_size_value<Type>::value) {
-        return maybe_equality_comparable<Type>(0) && unpack_maybe_equality_comparable<Type>(std::make_index_sequence<std::tuple_size<Type>::value>{});
+    } else if constexpr(is_iterator_v<Type>) {
+        return maybe_equality_comparable<Type>(0);
     } else if constexpr(has_value_type<Type>::value) {
-        if constexpr(is_iterator_v<Type> || std::is_same_v<typename Type::value_type, Type>) {
+        if constexpr(std::is_same_v<typename Type::value_type, Type>) {
             return maybe_equality_comparable<Type>(0);
         } else if constexpr(dispatch_is_equality_comparable<typename Type::value_type>()) {
             return maybe_equality_comparable<Type>(0);
         } else {
             return false;
         }
+    } else if constexpr(is_complete_v<std::tuple_size<std::remove_cv_t<Type>>>) {
+        if constexpr(has_tuple_size_value<Type>::value) {
+            return maybe_equality_comparable<Type>(0) && unpack_maybe_equality_comparable<Type>(std::make_index_sequence<std::tuple_size<Type>::value>{});
     } else {
         return maybe_equality_comparable<Type>(0);
     }
+    } else {
+        return maybe_equality_comparable<Type>(0);
+}
 }
 
 } // namespace internal