From bb06954814efd580a312208287b6d5df25b570d2 Mon Sep 17 00:00:00 2001 From: Dave Abrahams Date: Fri, 8 Nov 2002 17:23:06 +0000 Subject: [PATCH] Final patches for MSVC6 [SVN r16166] --- include/boost/detail/iterator.hpp | 36 +++++++++++++++++++------------ 1 file changed, 22 insertions(+), 14 deletions(-) diff --git a/include/boost/detail/iterator.hpp b/include/boost/detail/iterator.hpp index fdc0d75..33b7743 100644 --- a/include/boost/detail/iterator.hpp +++ b/include/boost/detail/iterator.hpp @@ -61,7 +61,7 @@ # include # include # include - +# include // for noncopyable // should be the last #include #include "boost/type_traits/detail/bool_trait_def.hpp" @@ -189,6 +189,10 @@ struct pointer_iterator_traits typedef T pointer; typedef std::random_access_iterator_tag iterator_category; typedef std::ptrdiff_t difference_type; + + // Makes MSVC6 happy under some circumstances + typedef noncopyable value_type; + typedef noncopyable reference; }; # ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION @@ -286,26 +290,30 @@ struct iterator_traits_aux template struct iterator_traits +{ + // Explicit forwarding from base class needed to keep MSVC6 happy + // under some circumstances. + private: # ifdef BOOST_BAD_OUTPUT_ITERATOR_SPECIALIZATION - : mpl::if_< + typedef + typename mpl::if_< is_bad_output_iterator , bad_output_iterator_traits , iterator_traits_aux - >::type + >::type base; # else - : iterator_traits_aux -# endif -{ + typedef iterator_traits_aux base; +# endif + public: + typedef typename base::value_type value_type; + typedef typename base::pointer pointer; + typedef typename base::reference reference; + typedef typename base::difference_type difference_type; + typedef typename base::iterator_category iterator_category; }; namespace iterator_traits_ { - template - struct iterator_difference - { - typedef typename iterator_traits::difference_type type; - }; - template struct distance_select { @@ -328,10 +336,10 @@ namespace iterator_traits_ } // namespace boost::detail::iterator_traits_ template -inline typename iterator_traits_::iterator_difference::type +inline typename iterator_traits::difference_type distance(Iterator first, Iterator last) { - typedef typename iterator_traits_::iterator_difference::type diff_t; + typedef typename iterator_traits::difference_type diff_t; typedef typename ::boost::detail::iterator_traits::iterator_category iterator_category; return iterator_traits_::distance_select::execute(