Jelajahi Sumber

core: make is_equality_comparable[_v] work with iterators (close #739)

Michele Caini 4 tahun lalu
induk
melakukan
151f180199
2 mengubah file dengan 4 tambahan dan 1 penghapusan
  1. 3 1
      src/entt/core/type_traits.hpp
  2. 1 0
      test/entt/core/type_traits.cpp

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

@@ -443,7 +443,9 @@ template<typename Type>
 template<typename Type>
 [[nodiscard]] constexpr auto is_equality_comparable(choice_t<1>)
 -> decltype(std::declval<typename Type::value_type>(), std::declval<Type>() == std::declval<Type>()) {
-    if constexpr(std::is_same_v<typename Type::value_type, Type>) {
+    if constexpr(is_iterator_v<Type>) {
+        return true;
+    } else if constexpr(std::is_same_v<typename Type::value_type, Type>) {
         return is_equality_comparable<Type>(choice<0>);
     } else {
         return is_equality_comparable<typename Type::value_type>(choice<2>);

+ 1 - 0
test/entt/core/type_traits.cpp

@@ -101,6 +101,7 @@ TEST(TypeTraits, IsEqualityComparable) {
     static_assert(entt::is_equality_comparable_v<std::vector<std::vector<int>>>);
     static_assert(entt::is_equality_comparable_v<std::unordered_map<int, int>>);
     static_assert(entt::is_equality_comparable_v<std::unordered_map<int, std::unordered_map<int, char>>>);
+    static_assert(entt::is_equality_comparable_v<std::vector<not_comparable>::iterator>);
     static_assert(entt::is_equality_comparable_v<nlohmann_json_like>);
 
     static_assert(!entt::is_equality_comparable_v<not_comparable>);