From baf6d06cc29fbb5975009d091d8f481fd452883d Mon Sep 17 00:00:00 2001 From: Andrey Semashev Date: Wed, 5 Feb 2025 00:24:07 +0300 Subject: [PATCH] Modernized iterator_traits.hpp. Added *_t type traits and removed an oudated macro that was used with ancient compilers. --- include/boost/iterator/iterator_traits.hpp | 41 +++++++++++++--------- 1 file changed, 24 insertions(+), 17 deletions(-) diff --git a/include/boost/iterator/iterator_traits.hpp b/include/boost/iterator/iterator_traits.hpp index 6582a68..0437a64 100644 --- a/include/boost/iterator/iterator_traits.hpp +++ b/include/boost/iterator/iterator_traits.hpp @@ -3,49 +3,56 @@ // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #ifndef ITERATOR_TRAITS_DWA200347_HPP -# define ITERATOR_TRAITS_DWA200347_HPP - -# include +#define ITERATOR_TRAITS_DWA200347_HPP #include namespace boost { namespace iterators { -// Macro for supporting old compilers, no longer needed but kept -// for backwards compatibility (it was documented). -#define BOOST_ITERATOR_CATEGORY iterator_category +template< typename Iterator > +using iterator_value_t = typename std::iterator_traits< Iterator >::value_type; - -template +template< typename Iterator > struct iterator_value { - typedef typename std::iterator_traits::value_type type; + using type = iterator_value_t< Iterator >; }; -template +template< typename Iterator > +using iterator_reference_t = typename std::iterator_traits< Iterator >::reference; + +template< typename Iterator > struct iterator_reference { - typedef typename std::iterator_traits::reference type; + using type = iterator_reference_t< Iterator >; }; +template< typename Iterator > +using iterator_pointer_t = typename std::iterator_traits< Iterator >::pointer; -template +template< typename Iterator > struct iterator_pointer { - typedef typename std::iterator_traits::pointer type; + using type = iterator_pointer_t< Iterator >; }; -template +template< typename Iterator > +using iterator_difference_t = typename std::iterator_traits< Iterator >::difference_type; + +template< typename Iterator > struct iterator_difference { - typedef typename std::iterator_traits::difference_type type; + using type = iterator_difference_t< Iterator >; }; -template +template< typename Iterator > +using iterator_category_t = typename std::iterator_traits< Iterator >::iterator_category; + +template< typename Iterator > struct iterator_category { - typedef typename std::iterator_traits::iterator_category type; + using type = iterator_category_t< Iterator >; }; } // namespace iterators