From 6f90982a45349fb60f134f0330f9b5316218aa8b Mon Sep 17 00:00:00 2001 From: Dave Abrahams Date: Fri, 9 Feb 2001 21:04:09 +0000 Subject: [PATCH] roll back mistaken changes [SVN r9062] --- include/boost/iterator_adaptors.hpp | 93 +++++------------------------ 1 file changed, 16 insertions(+), 77 deletions(-) diff --git a/include/boost/iterator_adaptors.hpp b/include/boost/iterator_adaptors.hpp index d5644b4..d9111c8 100644 --- a/include/boost/iterator_adaptors.hpp +++ b/include/boost/iterator_adaptors.hpp @@ -658,100 +658,39 @@ struct indirect_iterator_policies : public default_iterator_policies { return **x; } }; -// This macro definition is only temporary in this file -# if !defined(BOOST_MSVC) -# define BOOST_ARG_DEPENDENT_TYPENAME typename -# else -# define BOOST_ARG_DEPENDENT_TYPENAME -# endif - -namespace detail { -#if !defined(BOOST_MSVC) - template - struct value_type_of_value_type { - typedef typename boost::detail::iterator_traits::value_type outer_value; - typedef typename boost::detail::iterator_traits::value_type type; - }; -#else // Even this workaround doesn't fly :( - template - struct inner_traits_select { - template - struct rebind { - struct traits { - typedef typename boost::remove_const::type value_type; - typedef Pointer pointer; - typedef Reference reference; - }; - }; - }; - - struct no_value_type {}; - template <> - struct inner_traits_select { - template - struct rebind { - typedef typename boost::detail::iterator_traits::value_type outer_value; - typedef typename boost::detail::iterator_traits traits; - }; - }; -#endif -} - template ::type, -#else - detail::no_value_type, -#endif - class Pointer = Value*, - class Reference = Value& + // Mutable reference and pointer type in traits class -> mutable indirect iterator; + // Immutable reference and pointer type in traits class -> immutable indirect iterator + class InnerTraits = boost::detail::iterator_traits::value_type> > class indirect_iterator_generator { - typedef boost::detail::iterator_traits outer_traits; - typedef typename outer_traits::difference_type difference_type; - typedef typename outer_traits::iterator_category iterator_category; + typedef boost::detail::iterator_traits OuterTraits; + typedef typename OuterTraits::difference_type difference_type; + typedef typename OuterTraits::iterator_category iterator_category; -#if !defined(BOOST_MSVC) - typedef typename boost::remove_const::type value_type; - typedef Pointer pointer; - typedef Reference reference; -#else - typedef detail::inner_traits_select::template - rebind inner_traits; - typedef typename inner_traits::value_type value_type; - typedef typename inner_traits::pointer pointer; - typedef typename inner_traits::reference reference; -#endif + typedef typename InnerTraits::value_type value_type; + typedef typename InnerTraits::pointer pointer; + typedef typename InnerTraits::reference reference; public: typedef boost::iterator indirect_traits; typedef iterator_adaptor type; }; template ::type, -#else - detail::no_value_type, -#endif - class Pointer = Value*, - class Reference = Value&, - class ConstPointer = const Value*, - class ConstReference = const Value& + class ConstInnerIterator, // Immutable + class ConstInnerTraits = boost::detail::iterator_traits, + class InnerTraits = boost::detail::iterator_traits::value_type> > struct indirect_iterator_pair_generator { typedef typename indirect_iterator_generator::type iterator; + InnerTraits>::type iterator; typedef typename indirect_iterator_generator::type const_iterator; + ConstInnerTraits>::type const_iterator; }; -# undef BOOST_ARG_DEPENDENT_TYPENAME - -# ifndef BOOST_NO_STD_ITERATOR_TRAITS +#ifndef BOOST_NO_STD_ITERATOR_TRAITS template inline typename indirect_iterator_generator::type make_indirect_iterator(OuterIterator base) @@ -760,7 +699,7 @@ make_indirect_iterator(OuterIterator base) ::type result_t; return result_t(base); } -# endif +#endif // Tried to allow InnerTraits to be provided by explicit template // argument to the function, but could not get it to work. -Jeremy Siek