Browse Source

added is_equality_comparable[_v] trait

Michele Caini 6 years ago
parent
commit
14b4979c98
1 changed files with 25 additions and 6 deletions
  1. 25 6
      src/entt/core/type_traits.hpp

+ 25 - 6
src/entt/core/type_traits.hpp

@@ -120,6 +120,28 @@ template<typename Type>
 using type_list_unique_t = typename type_list_unique<Type>::type;
 
 
+/**
+ * @brief Provides the member constant `value` to true if a given type is
+ * equality comparable, false otherwise.
+ * @tparam Type Potentially equality comparable type.
+ */
+template<typename Type, typename = std::void_t<>>
+struct is_equality_comparable: std::false_type {};
+
+
+/*! @copydoc is_equality_comparable */
+template<typename Type>
+struct is_equality_comparable<Type, std::void_t<decltype(std::declval<Type>() == std::declval<Type>())>>: std::true_type {};
+
+
+/**
+ * @brief Helper variable template.
+ * @tparam Type Potentially equality comparable type.
+ */
+template<class Type>
+constexpr auto is_equality_comparable_v = is_equality_comparable<Type>::value;
+
+
 /*! @brief Traits class used mainly to push things across boundaries. */
 template<typename>
 struct named_type_traits;
@@ -146,16 +168,13 @@ using named_type_traits_t = typename named_type_traits<Type>::type;
 /**
  * @brief Provides the member constant `value` to true if a given type has a
  * name. In all other cases, `value` is false.
+ * @tparam Type Potentially named type.
  */
-template<typename, typename = std::void_t<>>
+template<typename Type, typename = std::void_t<>>
 struct is_named_type: std::false_type {};
 
 
-/**
- * @brief Provides the member constant `value` to true if a given type has a
- * name. In all other cases, `value` is false.
- * @tparam Type Potentially named type.
- */
+/*! @copydoc is_named_type */
 template<typename Type>
 struct is_named_type<Type, std::void_t<named_type_traits_t<std::decay_t<Type>>>>: std::true_type {};