mirror of
https://github.com/boostorg/detail.git
synced 2025-08-02 22:04:27 +02:00
Final patches for MSVC6
[SVN r16166]
This commit is contained in:
@@ -61,7 +61,7 @@
|
|||||||
# include <boost/mpl/aux_/has_xxx.hpp>
|
# include <boost/mpl/aux_/has_xxx.hpp>
|
||||||
# include <iterator>
|
# include <iterator>
|
||||||
# include <cstddef>
|
# include <cstddef>
|
||||||
|
# include <boost/utility.hpp> // for noncopyable
|
||||||
|
|
||||||
// should be the last #include
|
// should be the last #include
|
||||||
#include "boost/type_traits/detail/bool_trait_def.hpp"
|
#include "boost/type_traits/detail/bool_trait_def.hpp"
|
||||||
@@ -189,6 +189,10 @@ struct pointer_iterator_traits
|
|||||||
typedef T pointer;
|
typedef T pointer;
|
||||||
typedef std::random_access_iterator_tag iterator_category;
|
typedef std::random_access_iterator_tag iterator_category;
|
||||||
typedef std::ptrdiff_t difference_type;
|
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
|
# ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
|
||||||
@@ -286,26 +290,30 @@ struct iterator_traits_aux
|
|||||||
|
|
||||||
template <class Iterator>
|
template <class Iterator>
|
||||||
struct iterator_traits
|
struct iterator_traits
|
||||||
|
{
|
||||||
|
// Explicit forwarding from base class needed to keep MSVC6 happy
|
||||||
|
// under some circumstances.
|
||||||
|
private:
|
||||||
# ifdef BOOST_BAD_OUTPUT_ITERATOR_SPECIALIZATION
|
# ifdef BOOST_BAD_OUTPUT_ITERATOR_SPECIALIZATION
|
||||||
: mpl::if_<
|
typedef
|
||||||
|
typename mpl::if_<
|
||||||
is_bad_output_iterator<Iterator>
|
is_bad_output_iterator<Iterator>
|
||||||
, bad_output_iterator_traits
|
, bad_output_iterator_traits
|
||||||
, iterator_traits_aux<Iterator>
|
, iterator_traits_aux<Iterator>
|
||||||
>::type
|
>::type base;
|
||||||
# else
|
# else
|
||||||
: iterator_traits_aux<Iterator>
|
typedef iterator_traits_aux<Iterator> base;
|
||||||
# endif
|
# 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_
|
namespace iterator_traits_
|
||||||
{
|
{
|
||||||
template <class T>
|
|
||||||
struct iterator_difference
|
|
||||||
{
|
|
||||||
typedef typename iterator_traits<T>::difference_type type;
|
|
||||||
};
|
|
||||||
|
|
||||||
template <class Iterator, class Difference>
|
template <class Iterator, class Difference>
|
||||||
struct distance_select
|
struct distance_select
|
||||||
{
|
{
|
||||||
@@ -328,10 +336,10 @@ namespace iterator_traits_
|
|||||||
} // namespace boost::detail::iterator_traits_
|
} // namespace boost::detail::iterator_traits_
|
||||||
|
|
||||||
template <class Iterator>
|
template <class Iterator>
|
||||||
inline typename iterator_traits_::iterator_difference<Iterator>::type
|
inline typename iterator_traits<Iterator>::difference_type
|
||||||
distance(Iterator first, Iterator last)
|
distance(Iterator first, Iterator last)
|
||||||
{
|
{
|
||||||
typedef typename iterator_traits_::iterator_difference<Iterator>::type diff_t;
|
typedef typename iterator_traits<Iterator>::difference_type diff_t;
|
||||||
typedef typename ::boost::detail::iterator_traits<Iterator>::iterator_category iterator_category;
|
typedef typename ::boost::detail::iterator_traits<Iterator>::iterator_category iterator_category;
|
||||||
|
|
||||||
return iterator_traits_::distance_select<Iterator,diff_t>::execute(
|
return iterator_traits_::distance_select<Iterator,diff_t>::execute(
|
||||||
|
Reference in New Issue
Block a user