added is_equality_comparable[_v] trait

This commit is contained in:
Michele Caini
2019-10-06 23:39:43 +02:00
parent f956c64765
commit 14b4979c98

View File

@@ -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 {};