Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

Iterator Traits

Author: David Abrahams
Contact: dave@boost-consulting.com
Organization: Boost Consulting
Copyright: Copyright David Abrahams 2004.
abstract:Header <boost/iterator/iterator_traits.hpp> provides the ability to access an iterator's associated types using MPL-compatible metafunctions.

Overview

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. <boost/iterator/iterator_traits.hpp> provides access to these types using a standard metafunctions.

Summary

Header <boost/iterator/iterator_traits.hpp>:

template <class Iterator>
struct iterator_value
{
    typedef typename
      std::iterator_traits<Iterator>::value_type
    type;
};

template <class Iterator>
struct iterator_reference
{
    typedef typename
      std::iterator_traits<Iterator>::reference
    type;
};


template <class Iterator>
struct iterator_pointer
{
    typedef typename
      std::iterator_traits<Iterator>::pointer
    type;
};

template <class Iterator>
struct iterator_difference
{
    typedef typename
      detail::iterator_traits<Iterator>::difference_type
    type;
};

template <class Iterator>
struct iterator_category
{
    typedef typename
      detail::iterator_traits<Iterator>::iterator_category
    type;
};