|
37 | 37 |
|
38 | 38 | THRUST_NAMESPACE_BEGIN |
39 | 39 |
|
40 | | -namespace detail |
41 | | -{ |
42 | | - |
43 | | -template <typename T, typename = void> |
44 | | -struct iterator_traits_impl {}; |
45 | | - |
46 | | -template <typename T> |
47 | | -struct iterator_traits_impl< |
48 | | - T |
49 | | -, typename voider< |
50 | | - typename T::difference_type |
51 | | - , typename T::value_type |
52 | | - , typename T::pointer |
53 | | - , typename T::reference |
54 | | - , typename T::iterator_category |
55 | | - >::type |
56 | | -> |
57 | | -{ |
58 | | - typedef typename T::difference_type difference_type; |
59 | | - typedef typename T::value_type value_type; |
60 | | - typedef typename T::pointer pointer; |
61 | | - typedef typename T::reference reference; |
62 | | - typedef typename T::iterator_category iterator_category; |
63 | | -}; |
64 | | - |
65 | | -} // namespace detail |
66 | | - |
67 | 40 | /*! \p iterator_traits is a type trait class that provides a uniform |
68 | 41 | * interface for querying the properties of iterators at compile-time. |
69 | 42 | */ |
70 | 43 | template <typename T> |
71 | | -struct iterator_traits : detail::iterator_traits_impl<T> {}; |
72 | | - |
73 | | -// traits are specialized for pointer types |
74 | | -template<typename T> |
75 | | - struct iterator_traits<T*> |
76 | | -{ |
77 | | - typedef std::ptrdiff_t difference_type; |
78 | | - typedef T value_type; |
79 | | - typedef T* pointer; |
80 | | - typedef T& reference; |
81 | | - typedef std::random_access_iterator_tag iterator_category; |
82 | | -}; |
83 | | - |
84 | | -template<typename T> |
85 | | - struct iterator_traits<const T*> |
86 | | -{ |
87 | | - typedef std::ptrdiff_t difference_type; |
88 | | - typedef T value_type; |
89 | | - typedef const T* pointer; |
90 | | - typedef const T& reference; |
91 | | - typedef std::random_access_iterator_tag iterator_category; |
92 | | -}; // end iterator_traits |
| 44 | +struct iterator_traits : std::iterator_traits<T> {}; |
93 | 45 |
|
94 | 46 | template<typename Iterator> struct iterator_value; |
95 | 47 |
|
|
0 commit comments