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

This commit is contained in:
Michele Caini
2021-07-22 18:08:19 +02:00
parent bb8bfaf262
commit 151f180199
2 changed files with 4 additions and 1 deletions

View File

@@ -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>);

View File

@@ -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>);