types/traits: add is_orderable trait
This commit is contained in:
parent
3625a92977
commit
e42f71f9af
@ -470,4 +470,32 @@ namespace cruft {
|
||||
|
||||
template <typename T>
|
||||
constexpr auto is_tuple_like_v = is_tuple_like<T>::value;
|
||||
}
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
/// Tests if a type is orderable; ie, if it supports the less than operator
|
||||
///
|
||||
/// We use void_t to detect the presence of an appropriate operator<
|
||||
template <
|
||||
typename ValueT,
|
||||
typename = std::void_t<>
|
||||
>
|
||||
struct is_orderable : public std::false_type {};
|
||||
|
||||
|
||||
//-------------------------------------------------------------------------
|
||||
template <typename ValueT>
|
||||
struct is_orderable<
|
||||
ValueT,
|
||||
std::void_t<
|
||||
decltype (
|
||||
std::declval<ValueT> () < std::declval<ValueT> ()
|
||||
)
|
||||
>
|
||||
> : std::true_type {};
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------------
|
||||
template <typename ValueT>
|
||||
constexpr auto is_orderable_v = is_orderable<ValueT>::value;
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user