[section:traits Iterator Traits] `std::iterator_traits` provides access to five associated types of any iterator: its `value_type`, `reference`, `pointer`, `iterator_category`, and `difference_type`. Unfortunately, such a "multi-valued" traits template can be difficult to use in a metaprogramming context. `` provides access to these types using a standard metafunctions_. [h2 Synopsis] Header ``: template struct iterator_value { typedef typename std::iterator_traits::value_type type; }; template struct iterator_reference { typedef typename std::iterator_traits::reference type; }; template struct iterator_pointer { typedef typename std::iterator_traits::pointer type; }; template struct iterator_difference { typedef typename detail::iterator_traits::difference_type type; }; template struct iterator_category { typedef typename detail::iterator_traits::iterator_category type; }; [endsect]