38 #ifndef LIBPMEMOBJ_CPP_ITERATOR_TRAITS_HPP
39 #define LIBPMEMOBJ_CPP_ITERATOR_TRAITS_HPP
49 template <
typename T,
typename U,
typename C =
void>
50 struct has_iterator_category_convertible_to : std::false_type {
53 template <
typename T,
typename U>
54 struct has_iterator_category_convertible_to<
56 typename std::enable_if<std::is_convertible<
57 typename std::iterator_traits<T>::iterator_category,
58 U>::value>::type> : std::true_type {
67 :
public has_iterator_category_convertible_to<T, std::output_iterator_tag> {
76 :
public has_iterator_category_convertible_to<T, std::input_iterator_tag> {
85 :
public has_iterator_category_convertible_to<T,
86 std::forward_iterator_tag> {
95 T, std::bidirectional_iterator_tag> {
102 template <
typename T>
104 T, std::random_access_iterator_tag> {