Applied indirect_iterator patch from George A. Heintzelman <georgeh@aya.yale.edu>

Changed name of "bind" to "select" to avoid problems with MSVC.


[SVN r11337]
This commit is contained in:
Dave Abrahams 2001-10-04 19:36:28 +00:00
parent d1c7594344
commit 2d6f48d5ab

View File

@ -12,6 +12,9 @@
// //
// Revision History: // Revision History:
// 04 Oct 2001 David Abrahams
// Applied indirect_iterator patch from George A. Heintzelman <georgeh@aya.yale.edu>
// Changed name of "bind" to "select" to avoid problems with MSVC.
// 26 Sep 2001 David Abrahams // 26 Sep 2001 David Abrahams
// Added borland bug fix // Added borland bug fix
// 08 Mar 2001 Jeremy Siek // 08 Mar 2001 Jeremy Siek
@ -443,25 +446,25 @@ namespace detail {
struct default_value_type { struct default_value_type {
template <class Base, class Traits> template <class Base, class Traits>
struct bind { struct select {
typedef typename boost::detail::iterator_traits<Base>::value_type type; typedef typename boost::detail::iterator_traits<Base>::value_type type;
}; };
}; };
struct default_difference_type { struct default_difference_type {
template <class Base, class Traits> template <class Base, class Traits>
struct bind { struct select {
typedef typename boost::detail::iterator_traits<Base>::difference_type type; typedef typename boost::detail::iterator_traits<Base>::difference_type type;
}; };
}; };
struct default_iterator_category { struct default_iterator_category {
template <class Base, class Traits> template <class Base, class Traits>
struct bind { struct select {
typedef typename boost::detail::iterator_traits<Base>::iterator_category type; typedef typename boost::detail::iterator_traits<Base>::iterator_category type;
}; };
}; };
struct default_pointer { struct default_pointer {
template <class Base, class Traits> template <class Base, class Traits>
struct bind { struct select {
typedef typename Traits::value_type Value; typedef typename Traits::value_type Value;
typedef typename boost::detail::iterator_defaults<Base,Value>::pointer typedef typename boost::detail::iterator_defaults<Base,Value>::pointer
type; type;
@ -469,7 +472,7 @@ namespace detail {
}; };
struct default_reference { struct default_reference {
template <class Base, class Traits> template <class Base, class Traits>
struct bind { struct select {
typedef typename Traits::value_type Value; typedef typename Traits::value_type Value;
typedef typename boost::detail::iterator_defaults<Base,Value>::reference typedef typename boost::detail::iterator_defaults<Base,Value>::reference
type; type;
@ -891,9 +894,11 @@ struct indirect_iterator_policies : public default_iterator_policies
namespace detail { namespace detail {
# if !defined(BOOST_MSVC) // stragely instantiated even when unused! Maybe try a recursive template someday ;-) # if !defined(BOOST_MSVC) // stragely instantiated even when unused! Maybe try a recursive template someday ;-)
template <class T> template <class T>
struct value_type_of_value_type { struct traits_of_value_type {
typedef typename boost::detail::iterator_traits<T>::value_type outer_value; typedef typename boost::detail::iterator_traits<T>::value_type outer_value;
typedef typename boost::detail::iterator_traits<outer_value>::value_type type; typedef typename boost::detail::iterator_traits<outer_value>::value_type value_type;
typedef typename boost::detail::iterator_traits<outer_value>::reference reference;
typedef typename boost::detail::iterator_traits<outer_value>::pointer pointer;
}; };
# endif # endif
} }
@ -901,11 +906,25 @@ namespace detail {
template <class OuterIterator, // Mutable or Immutable, does not matter template <class OuterIterator, // Mutable or Immutable, does not matter
class Value class Value
#if !defined(BOOST_MSVC) #if !defined(BOOST_MSVC)
= BOOST_ARG_DEPENDENT_TYPENAME detail::value_type_of_value_type<OuterIterator>::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 #endif
, class Reference = Value&
, class Category = BOOST_ARG_DEPENDENT_TYPENAME boost::detail::iterator_traits<OuterIterator>::iterator_category
, class Pointer = Value*
> >
struct indirect_iterator_generator struct indirect_iterator_generator
{ {
@ -916,12 +935,26 @@ struct indirect_iterator_generator
template <class OuterIterator, // Mutable or Immutable, does not matter template <class OuterIterator, // Mutable or Immutable, does not matter
class Value class Value
#if !defined(BOOST_MSVC) #if !defined(BOOST_MSVC)
= BOOST_ARG_DEPENDENT_TYPENAME detail::value_type_of_value_type<OuterIterator>::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 #endif
, class Reference = Value&
, class ConstReference = const Value& , class ConstReference = const Value&
, class Category = BOOST_ARG_DEPENDENT_TYPENAME boost::detail::iterator_traits<OuterIterator>::iterator_category , class Category = BOOST_ARG_DEPENDENT_TYPENAME boost::detail::iterator_traits<
, class Pointer = Value* 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* , class ConstPointer = const Value*
> >
struct indirect_iterator_pair_generator struct indirect_iterator_pair_generator