1 2[section:iterator_traits Iterator Traits] 3 4`std::iterator_traits` provides access to five associated types 5of any iterator: its `value_type`, `reference`, `pointer`, 6`iterator_category`, and `difference_type`. Unfortunately, 7such a "multi-valued" traits template can be difficult to use in a 8metaprogramming context. `<boost/iterator/iterator_traits.hpp>` 9provides access to these types using a standard metafunctions_. 10 11[h2 Synopsis] 12 13Header `<boost/iterator/iterator_traits.hpp>`: 14 15 template <class Iterator> 16 struct iterator_value 17 { 18 typedef typename 19 std::iterator_traits<Iterator>::value_type 20 type; 21 }; 22 23 template <class Iterator> 24 struct iterator_reference 25 { 26 typedef typename 27 std::iterator_traits<Iterator>::reference 28 type; 29 }; 30 31 template <class Iterator> 32 struct iterator_pointer 33 { 34 typedef typename 35 std::iterator_traits<Iterator>::pointer 36 type; 37 }; 38 39 template <class Iterator> 40 struct iterator_difference 41 { 42 typedef typename 43 detail::iterator_traits<Iterator>::difference_type 44 type; 45 }; 46 47 template <class Iterator> 48 struct iterator_category 49 { 50 typedef typename 51 detail::iterator_traits<Iterator>::iterator_category 52 type; 53 }; 54 55[endsect] 56