msvc_has_iterator_workaround.hpp 3.5 KB

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