blob: 8710a2e32bfe33a92e8966d55c0516621b4138ec [file] [log] [blame]
Jeff Thompsonef2d5a42013-08-22 19:09:24 -07001// Boost.Range library
2//
3// Copyright Thorsten Ottosen 2003-2004. Use, modification and
4// distribution is subject to the Boost Software License, Version
5// 1.0. (See accompanying file LICENSE_1_0.txt or copy at
6// http://www.boost.org/LICENSE_1_0.txt)
7//
8// For more information, see http://www.boost.org/libs/range/
9//
10
11#ifndef BOOST_RANGE_ITERATOR_HPP
12#define BOOST_RANGE_ITERATOR_HPP
13
14#if defined(_MSC_VER) && (_MSC_VER >= 1020)
15# pragma once
16#endif
17
18#include <ndnboost/range/config.hpp>
19#include <ndnboost/range/mutable_iterator.hpp>
20#include <ndnboost/range/const_iterator.hpp>
21#include <ndnboost/type_traits/is_const.hpp>
22#include <ndnboost/type_traits/remove_const.hpp>
23#include <ndnboost/mpl/eval_if.hpp>
24
25namespace ndnboost
26{
27
28#if BOOST_WORKAROUND(BOOST_MSVC, == 1310)
29
30 namespace range_detail_vc7_1
31 {
32 template< typename C, typename Sig = void(C) >
33 struct range_iterator
34 {
35 typedef BOOST_RANGE_DEDUCED_TYPENAME
36 mpl::eval_if_c< is_const<C>::value,
37 range_const_iterator< typename remove_const<C>::type >,
38 range_mutable_iterator<C> >::type type;
39 };
40
41 template< typename C, typename T >
42 struct range_iterator< C, void(T[]) >
43 {
44 typedef T* type;
45 };
46 }
47
48#endif
49
50 template< typename C >
51 struct range_iterator
52 {
53#if BOOST_WORKAROUND(BOOST_MSVC, == 1310)
54
55 typedef BOOST_RANGE_DEDUCED_TYPENAME
56 range_detail_vc7_1::range_iterator<C>::type type;
57
58#else
59
60 typedef BOOST_RANGE_DEDUCED_TYPENAME
61 mpl::eval_if_c< is_const<C>::value,
62 range_const_iterator< typename remove_const<C>::type >,
63 range_mutable_iterator<C> >::type type;
64
65#endif
66 };
67
68} // namespace ndnboost
69
70//#endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
71
72#endif