25 using type =
typename std::iterator_traits<remove_cvref_t<T>>::value_type;
28 template<
class T>
struct iter_value<
T,
std::
enable_if_t<!has_iterator_traits_value_type_v<remove_cvref_t<T>> && std::is_pointer_v<T>>> {
29 using type =
decltype(*std::declval<std::remove_cv_t<T>>());
33 struct iter_value<
T,
std::
enable_if_t<!has_iterator_traits_value_type_v<remove_cvref_t<T>> && !std::is_pointer_v<T> && std::is_array_v<T>>> {
34 using type = std::remove_cv_t<std::remove_extent_t<T>>;
39 std::
enable_if_t<!has_iterator_traits_value_type_v<remove_cvref_t<T>> && !std::is_pointer_v<T> && !std::is_array_v<T> && std::is_const_v<T>>> {
45 std::
enable_if_t<!has_iterator_traits_value_type_v<remove_cvref_t<T>> && !std::is_pointer_v<T> && !std::is_array_v<T> && !std::is_const_v<T> &&
46 has_value_type_v<T>>> {
47 using type =
typename T::value_type;
52 std::
enable_if_t<!has_iterator_traits_value_type_v<remove_cvref_t<T>> && !std::is_pointer_v<T> && !std::is_array_v<T> && !std::is_const_v<T> &&
53 !has_value_type_v<T> && has_element_type_v<T>>> {
54 using type =
typename T::element_type;
Definition Partitioner.hpp:146
typename iter_value< T >::type iter_value_t
A C++17 type trait equivalent to the C++20 iter_value concept.
Definition iter_value.hpp:58
constexpr size_t hash(const T &v)
Generates a hash for the provided type.
Definition Hash.hpp:25
A C++17 type trait equivalent to the C++20 iter_value concept.
Definition iter_value.hpp:22