1// Boost.Range library
2//
3// Copyright Eric Niebler 2014. 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_DETAIL_MSVC_HAS_ITERATOR_WORKAROUND_HPP
12#define BOOST_RANGE_DETAIL_MSVC_HAS_ITERATOR_WORKAROUND_HPP
13
14#if defined(_MSC_VER)
15# pragma once
16#endif
17
18#ifndef BOOST_RANGE_MUTABLE_ITERATOR_HPP
19# error This file should only be included from <boost/range/mutable_iterator.hpp>
20#endif
21
22#if BOOST_WORKAROUND(BOOST_MSVC, <= 1600)
23namespace boost
24{
25namespace cb_details
26{
27 template <class Buff, class Traits>
28 struct iterator;
29}
30
31namespace python
32{
33 template <class Container
34 , class NextPolicies /*= objects::default_iterator_call_policies*/>
35 struct iterator;
36}
37
38namespace type_erasure
39{
40 template<
41 class Traversal,
42 class T /*= _self*/,
43 class Reference /*= ::boost::use_default*/,
44 class DifferenceType /*= ::std::ptrdiff_t*/,
45 class ValueType /*= typename deduced<iterator_value_type<T> >::type*/
46 >
47 struct iterator;
48}
49
50namespace unordered { namespace iterator_detail
51{
52 template <typename Node>
53 struct iterator;
54}}
55
56namespace container { namespace container_detail
57{
58 template<class IIterator, bool IsConst>
59 class iterator;
60}}
61
62namespace spirit { namespace lex { namespace lexertl
63{
64 template <typename Functor>
65 class iterator;
66}}}
67
68namespace range_detail
69{
70 template <class Buff, class Traits>
71 struct has_iterator< ::boost::cb_details::iterator<Buff, Traits> >
72 : mpl::false_
73 {};
74
75 template <class Buff, class Traits>
76 struct has_iterator< ::boost::cb_details::iterator<Buff, Traits> const>
77 : mpl::false_
78 {};
79
80 template <class Container, class NextPolicies>
81 struct has_iterator< ::boost::python::iterator<Container, NextPolicies> >
82 : mpl::false_
83 {};
84
85 template <class Container, class NextPolicies>
86 struct has_iterator< ::boost::python::iterator<Container, NextPolicies> const>
87 : mpl::false_
88 {};
89
90 template<class Traversal, class T, class Reference, class DifferenceType, class ValueType>
91 struct has_iterator< ::boost::type_erasure::iterator<Traversal, T, Reference, DifferenceType, ValueType> >
92 : mpl::false_
93 {};
94
95 template<class Traversal, class T, class Reference, class DifferenceType, class ValueType>
96 struct has_iterator< ::boost::type_erasure::iterator<Traversal, T, Reference, DifferenceType, ValueType> const>
97 : mpl::false_
98 {};
99
100 template <typename Node>
101 struct has_iterator< ::boost::unordered::iterator_detail::iterator<Node> >
102 : mpl::false_
103 {};
104
105 template <typename Node>
106 struct has_iterator< ::boost::unordered::iterator_detail::iterator<Node> const>
107 : mpl::false_
108 {};
109
110 template<class IIterator, bool IsConst>
111 struct has_iterator< ::boost::container::container_detail::iterator<IIterator, IsConst> >
112 : mpl::false_
113 {};
114
115 template<class IIterator, bool IsConst>
116 struct has_iterator< ::boost::container::container_detail::iterator<IIterator, IsConst> const>
117 : mpl::false_
118 {};
119
120 template <typename Functor>
121 struct has_iterator< ::boost::spirit::lex::lexertl::iterator<Functor> >
122 : mpl::false_
123 {};
124
125 template <typename Functor>
126 struct has_iterator< ::boost::spirit::lex::lexertl::iterator<Functor> const>
127 : mpl::false_
128 {};
129}
130}
131#endif
132#endif
133