From 2d6f48d5abfd8c736dcf41dd70a17a7492ae15ea Mon Sep 17 00:00:00 2001 From: Dave Abrahams Date: Thu, 4 Oct 2001 19:36:28 +0000 Subject: [PATCH] Applied indirect_iterator patch from George A. Heintzelman Changed name of "bind" to "select" to avoid problems with MSVC. [SVN r11337] --- include/boost/iterator_adaptors.hpp | 63 ++++++++++++++++++++++------- 1 file changed, 48 insertions(+), 15 deletions(-) diff --git a/include/boost/iterator_adaptors.hpp b/include/boost/iterator_adaptors.hpp index 596e0e3..52fc730 100644 --- a/include/boost/iterator_adaptors.hpp +++ b/include/boost/iterator_adaptors.hpp @@ -12,6 +12,9 @@ // // Revision History: +// 04 Oct 2001 David Abrahams +// Applied indirect_iterator patch from George A. Heintzelman +// Changed name of "bind" to "select" to avoid problems with MSVC. // 26 Sep 2001 David Abrahams // Added borland bug fix // 08 Mar 2001 Jeremy Siek @@ -443,25 +446,25 @@ namespace detail { struct default_value_type { template - struct bind { + struct select { typedef typename boost::detail::iterator_traits::value_type type; }; }; struct default_difference_type { template - struct bind { + struct select { typedef typename boost::detail::iterator_traits::difference_type type; }; }; struct default_iterator_category { template - struct bind { + struct select { typedef typename boost::detail::iterator_traits::iterator_category type; }; }; struct default_pointer { template - struct bind { + struct select { typedef typename Traits::value_type Value; typedef typename boost::detail::iterator_defaults::pointer type; @@ -469,7 +472,7 @@ namespace detail { }; struct default_reference { template - struct bind { + struct select { typedef typename Traits::value_type Value; typedef typename boost::detail::iterator_defaults::reference type; @@ -891,9 +894,11 @@ struct indirect_iterator_policies : public default_iterator_policies namespace detail { # if !defined(BOOST_MSVC) // stragely instantiated even when unused! Maybe try a recursive template someday ;-) template - struct value_type_of_value_type { + struct traits_of_value_type { typedef typename boost::detail::iterator_traits::value_type outer_value; - typedef typename boost::detail::iterator_traits::value_type type; + typedef typename boost::detail::iterator_traits::value_type value_type; + typedef typename boost::detail::iterator_traits::reference reference; + typedef typename boost::detail::iterator_traits::pointer pointer; }; # endif } @@ -901,11 +906,25 @@ namespace detail { template ::type + = BOOST_ARG_DEPENDENT_TYPENAME detail::traits_of_value_type< + OuterIterator>::value_type +#endif + , class Reference +#if !defined(BOOST_MSVC) + = BOOST_ARG_DEPENDENT_TYPENAME detail::traits_of_value_type< + OuterIterator>::reference +#else + = Value & +#endif + , class Category = BOOST_ARG_DEPENDENT_TYPENAME boost::detail::iterator_traits< + OuterIterator>::iterator_category + , class Pointer +#if !defined(BOOST_MSVC) + = BOOST_ARG_DEPENDENT_TYPENAME detail::traits_of_value_type< + OuterIterator>::pointer +#else + = Value* #endif - , class Reference = Value& - , class Category = BOOST_ARG_DEPENDENT_TYPENAME boost::detail::iterator_traits::iterator_category - , class Pointer = Value* > struct indirect_iterator_generator { @@ -916,12 +935,26 @@ struct indirect_iterator_generator template ::type + = BOOST_ARG_DEPENDENT_TYPENAME detail::traits_of_value_type< + OuterIterator>::value_type +#endif + , class Reference +#if !defined(BOOST_MSVC) + = BOOST_ARG_DEPENDENT_TYPENAME detail::traits_of_value_type< + OuterIterator>::reference +#else + = Value & #endif - , class Reference = Value& , class ConstReference = const Value& - , class Category = BOOST_ARG_DEPENDENT_TYPENAME boost::detail::iterator_traits::iterator_category - , class Pointer = Value* + , class Category = BOOST_ARG_DEPENDENT_TYPENAME boost::detail::iterator_traits< + OuterIterator>::iterator_category + , class Pointer +#if !defined(BOOST_MSVC) + = BOOST_ARG_DEPENDENT_TYPENAME detail::traits_of_value_type< + OuterIterator>::pointer +#else + = Value* +#endif , class ConstPointer = const Value* > struct indirect_iterator_pair_generator