22template <
typename... Ts>
31template <
typename... Ts>
32using void_t =
typename make_void<Ts...>::type;
34template <
typename T,
typename =
void>
35struct has_data_member : std::false_type {};
38struct has_data_member<T, utl::
trait::void_t<decltype(std::declval<T>().data())>> : std::true_type {};
47template <
typename T,
typename =
void>
48struct has_size_member : std::false_type {};
51struct has_size_member<T, utl::
trait::void_t<decltype(std::declval<T>().size())>> : std::true_type {};
60template <
typename T,
typename =
void>
61struct has_resize_member : std::false_type {};
64struct has_resize_member<T, utl::
trait::void_t<decltype(std::declval<T>().resize(0))>> : std::true_type {};
73template <
typename,
typename =
void>
74struct has_value_type : std::false_type {};
77struct has_value_type<T, utl::
trait::void_t<typename T::value_type>> : std::true_type {};
86template <
typename T,
typename =
void>
87struct is_iterable : std::false_type {};
90struct is_iterable<T, std::
void_t<decltype(std::begin(std::declval<T&>())), decltype(std::end(std::declval<T&>()))>>
constexpr bool has_resize_member_v
Type trait to detect if a type T has a resize() member function.
Definition trait.hpp:71
constexpr bool has_data_member_v
Type trait to detect if a type T has a data() member function.
Definition trait.hpp:45
constexpr bool is_non_contiguous_v
Type trait to check if a type T represents a non-contiguous range.
Definition trait.hpp:115
constexpr bool has_size_member_v
Type trait to detect if a type T has a size() member function.
Definition trait.hpp:58
constexpr bool is_contiguous_v
Type trait to check if a type T represents a contiguous range.
Definition trait.hpp:107
constexpr bool is_iterable_v
Type trait to check if a type T is iterable.
Definition trait.hpp:99
constexpr bool has_value_type_v
Type trait to detect if a type T defines a nested value_type.
Definition trait.hpp:84
typename make_void< Ts... >::type void_t
A type trait similar to std::void_t that allows for discarding overloads using SFINAE.
Definition trait.hpp:32
Provides additional type trait utilities.
Definition trait.hpp:15
Definition exception.hpp:56