1//////////////////////////////////////////////////////////////////////////////
2//
3// (C) Copyright Ion Gaztanaga 2014-2014.
4// Distributed under the Boost Software License, Version 1.0.
5// (See accompanying file LICENSE_1_0.txt or copy at
6// http://www.boost.org/LICENSE_1_0.txt)
7//
8// See http://www.boost.org/libs/move for documentation.
9//
10//////////////////////////////////////////////////////////////////////////////
11
12//! \file
13
14#ifndef BOOST_MOVE_DETAIL_ITERATOR_TRAITS_HPP
15#define BOOST_MOVE_DETAIL_ITERATOR_TRAITS_HPP
16
17#ifndef BOOST_CONFIG_HPP
18# include <boost/config.hpp>
19#endif
20#
21#if defined(BOOST_HAS_PRAGMA_ONCE)
22# pragma once
23#endif
24
25#include <cstddef>
26
27#include <boost/move/detail/std_ns_begin.hpp>
28BOOST_MOVE_STD_NS_BEG
29
30struct input_iterator_tag;
31struct forward_iterator_tag;
32struct bidirectional_iterator_tag;
33struct random_access_iterator_tag;
34struct output_iterator_tag;
35
36BOOST_MOVE_STD_NS_END
37#include <boost/move/detail/std_ns_end.hpp>
38
39namespace boost{ namespace movelib{
40
41template<class Iterator>
42struct iterator_traits
43{
44 typedef typename Iterator::difference_type difference_type;
45 typedef typename Iterator::value_type value_type;
46 typedef typename Iterator::pointer pointer;
47 typedef typename Iterator::reference reference;
48 typedef typename Iterator::iterator_category iterator_category;
49};
50
51template<class T>
52struct iterator_traits<T*>
53{
54 typedef std::ptrdiff_t difference_type;
55 typedef T value_type;
56 typedef T* pointer;
57 typedef T& reference;
58 typedef std::random_access_iterator_tag iterator_category;
59};
60
61template<class T>
62struct iterator_traits<const T*>
63{
64 typedef std::ptrdiff_t difference_type;
65 typedef T value_type;
66 typedef const T* pointer;
67 typedef const T& reference;
68 typedef std::random_access_iterator_tag iterator_category;
69};
70
71}} //namespace boost { namespace movelib{
72
73#endif //#ifndef BOOST_MOVE_DETAIL_ITERATOR_TRAITS_HPP
74