Added compatibility workarounds for MW7/8 and MSVC6/7.

[SVN r756]
This commit is contained in:
Thomas Witt
2002-12-09 18:09:37 +00:00
parent 891d49bb1c
commit c93c921109

View File

@@ -1,9 +1,11 @@
#ifndef BOOST_ITERATOR_ADAPTORS_HPP #ifndef BOOST_ITERATOR_ADAPTORS_HPP
#define BOOST_ITERATOR_ADAPTORS_HPP #define BOOST_ITERATOR_ADAPTORS_HPP
#include <boost/config.hpp> // for prior
#include <boost/static_assert.hpp> #include <boost/static_assert.hpp>
#include <boost/utility.hpp> // for prior #include <boost/utility.hpp> // for prior
#include <boost/iterator.hpp> #include <boost/iterator.hpp>
#include <boost/detail/workaround.hpp>
#include <boost/iterator/iterator_categories.hpp> #include <boost/iterator/iterator_categories.hpp>
#include <boost/mpl/aux_/has_xxx.hpp> #include <boost/mpl/aux_/has_xxx.hpp>
#include <boost/mpl/logical/or.hpp> #include <boost/mpl/logical/or.hpp>
@@ -32,6 +34,16 @@ namespace boost {
template<typename T> template<typename T>
struct base struct base
{ {
#ifdef BOOST_MSVC
// Disable enable if for MSVC
typedef T type;
// This would give a nice error messages containing
// invalid overlaod, but has the big disadvantage that
// there is no reference to user code.
// struct invalid_overload;
// typedef invalid_overload type;
#endif
}; };
}; };
@@ -48,8 +60,11 @@ namespace boost {
class Facade2, class Facade2,
class Return> class Return>
struct enable_if_interoperable : struct enable_if_interoperable :
enabled<(is_interoperable<Facade1, Facade2>::value)>::template base<Return> enabled< is_interoperable<Facade1, Facade2>::value >::template base<Return>
{ {
#if BOOST_WORKAROUND(BOOST_MSVC, <=1200)
typedef typename enabled< is_interoperable<Facade1, Facade2>::value >::template base<Return>::type type;
#endif
}; };
} // namespace detail } // namespace detail
@@ -58,8 +73,11 @@ namespace boost {
template<typename From, template<typename From,
typename To> typename To>
struct enable_if_convertible : struct enable_if_convertible :
detail::enabled<(is_convertible<From, To>::value)>::template base<detail::enable_type> detail::enabled< is_convertible<From, To>::value >::template base<detail::enable_type>
{ {
#if BOOST_WORKAROUND(BOOST_MSVC, <=1200)
typedef typename detail::enabled< is_convertible<From, To>::value >::template base<detail::enable_type>::type type;
#endif
}; };
// //
@@ -123,6 +141,7 @@ namespace boost {
class repository : class repository :
public iterator<C, V, D, P, R> public iterator<C, V, D, P, R>
{ {
public:
typedef Derived derived_t; typedef Derived derived_t;
}; };
@@ -142,21 +161,6 @@ namespace boost {
} }
}; };
#if 0
namespace detail {
template <class Final1,
class Final2>
struct compare_traits :
mpl::if_< is_convertible<Final2, Final1>,
Final1,
Final2 >
{
};
} // namespace detail
#endif
template <class Base> template <class Base>
class iterator_comparisons : class iterator_comparisons :
public Base public Base
@@ -370,19 +374,17 @@ namespace boost {
{ Derived result(this->derived()); return result -= x; } { Derived result(this->derived()); return result -= x; }
}; };
//
// We should provide NTP here
// //
// TODO Handle default arguments the same way as // TODO Handle default arguments the same way as
// in former ia lib // in former ia lib
// //
template <class Derived, template <class Derived,
class Iterator, class Iterator,
class Value = typename std::iterator_traits<Iterator>::value_type, class Value = typename detail::iterator_traits<Iterator>::value_type,
class Reference = typename std::iterator_traits<Iterator>::reference, class Reference = typename detail::iterator_traits<Iterator>::reference,
class Pointer = typename std::iterator_traits<Iterator>::pointer, class Pointer = typename detail::iterator_traits<Iterator>::pointer,
class Category = typename std::iterator_traits<Iterator>::iterator_category, class Category = typename detail::iterator_traits<Iterator>::iterator_category,
class Distance = typename std::iterator_traits<Iterator>::difference_type> class Distance = typename detail::iterator_traits<Iterator>::difference_type>
class iterator_adaptor : class iterator_adaptor :
public iterator_facade<Derived, public iterator_facade<Derived,
Value, Value,
@@ -534,13 +536,6 @@ namespace boost {
AdaptableUnaryFunction m_f; AdaptableUnaryFunction m_f;
}; };
// This macro definition is only temporary in this file
# if !defined(BOOST_MSVC) || BOOST_MSVC > 1300
# define BOOST_ARG_DEPENDENT_TYPENAME typename
# else
# define BOOST_ARG_DEPENDENT_TYPENAME
# endif
struct unspecified {}; struct unspecified {};
namespace detail namespace detail