1 // Copyright (C) 2017 Michel Morin.
3 // Distributed under the Boost Software License, Version 1.0.
4 // (See accompanying file LICENSE_1_0.txt or copy at
5 // http://www.boost.org/LICENSE_1_0.txt)
7 #ifndef BOOST_ITERATOR_ADVANCE_HPP
8 #define BOOST_ITERATOR_ADVANCE_HPP
10 #include <boost/config.hpp>
11 #include <boost/detail/workaround.hpp>
12 #include <boost/iterator/iterator_categories.hpp>
18 template <typename InputIterator, typename Distance>
19 inline BOOST_CXX14_CONSTEXPR void
23 , incrementable_traversal_tag
32 #if BOOST_WORKAROUND(BOOST_GCC_VERSION, >= 40600)
33 // type-limits warning issued below when n is an unsigned integral
34 #pragma GCC diagnostic push
35 #pragma GCC diagnostic ignored "-Wtype-limits"
38 template <typename BidirectionalIterator, typename Distance>
39 inline BOOST_CXX14_CONSTEXPR void
41 BidirectionalIterator& it
43 , bidirectional_traversal_tag
60 #if BOOST_WORKAROUND(BOOST_GCC_VERSION, >= 40600)
61 #pragma GCC diagnostic pop
64 template <typename RandomAccessIterator, typename Distance>
65 inline BOOST_CXX14_CONSTEXPR void
67 RandomAccessIterator& it
69 , random_access_traversal_tag
76 namespace advance_adl_barrier {
77 template <typename InputIterator, typename Distance>
78 inline BOOST_CXX14_CONSTEXPR void
79 advance(InputIterator& it, Distance n)
82 it, n, typename iterator_traversal<InputIterator>::type()
87 using namespace advance_adl_barrier;
89 } // namespace iterators
91 using namespace iterators::advance_adl_barrier;