summaryrefslogtreecommitdiff
path: root/boost/python
diff options
context:
space:
mode:
Diffstat (limited to 'boost/python')
-rw-r--r--boost/python/args.hpp26
-rw-r--r--boost/python/back_reference.hpp31
-rw-r--r--boost/python/bases.hpp18
-rw-r--r--boost/python/class.hpp45
-rw-r--r--[-rwxr-xr-x]boost/python/converter/arg_from_python.hpp4
-rw-r--r--[-rwxr-xr-x]boost/python/converter/arg_to_python_base.hpp8
-rw-r--r--[-rwxr-xr-x]boost/python/converter/object_manager.hpp74
-rw-r--r--boost/python/converter/registered.hpp3
-rw-r--r--boost/python/converter/registered_pointee.hpp32
-rw-r--r--boost/python/copy_const_reference.hpp2
-rw-r--r--boost/python/copy_non_const_reference.hpp2
-rw-r--r--boost/python/data_members.hpp4
-rw-r--r--boost/python/default_call_policies.hpp2
-rw-r--r--[-rwxr-xr-x]boost/python/detail/borrowed_ptr.hpp30
-rw-r--r--boost/python/detail/config.hpp3
-rw-r--r--boost/python/detail/construct.hpp8
-rw-r--r--boost/python/detail/cv_category.hpp2
-rw-r--r--boost/python/detail/destroy.hpp49
-rw-r--r--[-rwxr-xr-x]boost/python/detail/enable_if.hpp35
-rw-r--r--[-rwxr-xr-x]boost/python/detail/force_instantiate.hpp14
-rw-r--r--boost/python/detail/if_else.hpp39
-rw-r--r--boost/python/detail/msvc_typeinfo.hpp19
-rw-r--r--boost/python/detail/referent_storage.hpp10
-rw-r--r--boost/python/detail/result.hpp4
-rw-r--r--boost/python/detail/string_literal.hpp38
-rw-r--r--boost/python/detail/type_list.hpp4
-rw-r--r--boost/python/detail/type_list_impl_no_pts.hpp107
-rw-r--r--boost/python/detail/value_is_xxx.hpp30
-rw-r--r--boost/python/extract.hpp3
-rw-r--r--[-rwxr-xr-x]boost/python/handle.hpp27
-rw-r--r--boost/python/init.hpp22
-rw-r--r--boost/python/make_constructor.hpp9
-rw-r--r--boost/python/manage_new_object.hpp2
-rw-r--r--boost/python/object/class_metadata.hpp4
-rw-r--r--boost/python/object/forward.hpp101
-rw-r--r--boost/python/object/iterator.hpp28
-rw-r--r--boost/python/object/pointer_holder.hpp6
-rw-r--r--boost/python/object/value_holder.hpp6
-rw-r--r--boost/python/object_core.hpp113
-rw-r--r--[-rwxr-xr-x]boost/python/object_items.hpp3
-rw-r--r--boost/python/object_slices.hpp4
-rw-r--r--boost/python/opaque_pointer_converter.hpp13
-rw-r--r--[-rwxr-xr-x]boost/python/other.hpp62
-rw-r--r--[-rwxr-xr-x]boost/python/proxy.hpp4
-rw-r--r--boost/python/ptr.hpp63
-rw-r--r--[-rwxr-xr-x]boost/python/pure_virtual.hpp2
-rw-r--r--boost/python/reference_existing_object.hpp2
-rw-r--r--boost/python/register_ptr_to_python.hpp2
-rw-r--r--[-rwxr-xr-x]boost/python/return_arg.hpp2
-rw-r--r--boost/python/return_internal_reference.hpp2
-rw-r--r--boost/python/suite/indexing/indexing_suite.hpp4
-rw-r--r--boost/python/to_python_converter.hpp5
-rw-r--r--boost/python/to_python_value.hpp5
-rw-r--r--boost/python/type_id.hpp28
-rw-r--r--boost/python/with_custodian_and_ward.hpp4
55 files changed, 63 insertions, 1106 deletions
diff --git a/boost/python/args.hpp b/boost/python/args.hpp
index 8f8791d76f..55d1283b5a 100644
--- a/boost/python/args.hpp
+++ b/boost/python/args.hpp
@@ -102,7 +102,6 @@ namespace detail
return this->operator,(python::arg(name));
}
-# ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
template<typename T>
struct is_keywords
{
@@ -126,31 +125,6 @@ namespace detail
typedef mpl::bool_<value> type;
BOOST_PYTHON_MPL_LAMBDA_SUPPORT(1,is_reference_to_keywords,(T))
};
-# else
- typedef char (&yes_keywords_t)[1];
- typedef char (&no_keywords_t)[2];
-
- no_keywords_t is_keywords_test(...);
-
- template<std::size_t nkeywords>
- yes_keywords_t is_keywords_test(void (*)(keywords<nkeywords>&));
-
- template<std::size_t nkeywords>
- yes_keywords_t is_keywords_test(void (*)(keywords<nkeywords> const&));
-
- template<typename T>
- class is_reference_to_keywords
- {
- public:
- BOOST_STATIC_CONSTANT(
- bool, value = (
- sizeof(detail::is_keywords_test( (void (*)(T))0 ))
- == sizeof(detail::yes_keywords_t)));
-
- typedef mpl::bool_<value> type;
- BOOST_PYTHON_MPL_LAMBDA_SUPPORT(1,is_reference_to_keywords,(T))
- };
-# endif
}
inline detail::keywords<1> args(char const* name)
diff --git a/boost/python/back_reference.hpp b/boost/python/back_reference.hpp
index c1daba60c1..e68066f7d5 100644
--- a/boost/python/back_reference.hpp
+++ b/boost/python/back_reference.hpp
@@ -29,7 +29,6 @@ struct back_reference
T m_value;
};
-# ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
template<typename T>
class is_back_reference
{
@@ -44,36 +43,6 @@ class is_back_reference<back_reference<T> >
BOOST_STATIC_CONSTANT(bool, value = true);
};
-# else // no partial specialization
-
-}} // namespace boost::python
-
-#include <boost/type.hpp>
-
-namespace boost { namespace python {
-
-namespace detail
-{
- typedef char (&yes_back_reference_t)[1];
- typedef char (&no_back_reference_t)[2];
-
- no_back_reference_t is_back_reference_test(...);
-
- template<typename T>
- yes_back_reference_t is_back_reference_test(boost::type< back_reference<T> >);
-}
-
-template<typename T>
-class is_back_reference
-{
- public:
- BOOST_STATIC_CONSTANT(
- bool, value = (
- sizeof(detail::is_back_reference_test(boost::type<T>()))
- == sizeof(detail::yes_back_reference_t)));
-};
-
-# endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
//
// implementations
diff --git a/boost/python/bases.hpp b/boost/python/bases.hpp
index 0bd7350e55..614d62232b 100644
--- a/boost/python/bases.hpp
+++ b/boost/python/bases.hpp
@@ -24,7 +24,6 @@ namespace boost { namespace python {
namespace detail
{
-# ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
template <class T> struct specifies_bases
: mpl::false_
{
@@ -35,23 +34,6 @@ namespace boost { namespace python {
: mpl::true_
{
};
-# else
- template < BOOST_PP_ENUM_PARAMS(BOOST_PYTHON_MAX_BASES, class Base) >
- static char is_bases_helper(bases< BOOST_PYTHON_BASE_PARAMS > const&);
-
- static char (& is_bases_helper(...) )[256];
-
- template <class T>
- struct specifies_bases
- {
- private:
- static typename add_reference<T>::type make();
- BOOST_STATIC_CONSTANT(bool, non_ref = !is_reference<T>::value);
- public:
- BOOST_STATIC_CONSTANT(bool, value = non_ref & (sizeof(is_bases_helper(make())) == 1));
- typedef mpl::bool_<value> type;
- };
-# endif
template <class T, class Prev = bases<> >
struct select_bases
: mpl::if_<
diff --git a/boost/python/class.hpp b/boost/python/class.hpp
index 253667bbd7..f43b615ace 100644
--- a/boost/python/class.hpp
+++ b/boost/python/class.hpp
@@ -45,8 +45,7 @@
# if BOOST_WORKAROUND(__MWERKS__, <= 0x3004) \
/* pro9 reintroduced the bug */ \
|| (BOOST_WORKAROUND(__MWERKS__, > 0x3100) \
- && BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3201))) \
- || BOOST_WORKAROUND(__GNUC__, < 3)
+ && BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3201)))
# define BOOST_PYTHON_NO_MEMBER_POINTER_ORDERING 1
@@ -302,7 +301,6 @@ class class_ : public objects::class_base
}
// Property creation
-# if !BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
template <class Get>
self& add_property(char const* name, Get fget, char const* docstr = 0)
{
@@ -317,47 +315,6 @@ class class_ : public objects::class_base
name, this->make_getter(fget), this->make_setter(fset), docstr);
return *this;
}
-# else
- private:
- template <class Get>
- self& add_property_impl(char const* name, Get fget, char const* docstr, int)
- {
- base::add_property(name, this->make_getter(fget), docstr);
- return *this;
- }
-
- template <class Get, class Set>
- self& add_property_impl(char const* name, Get fget, Set fset, ...)
- {
- base::add_property(
- name, this->make_getter(fget), this->make_setter(fset), 0);
- return *this;
- }
-
- public:
- template <class Get>
- self& add_property(char const* name, Get fget)
- {
- base::add_property(name, this->make_getter(fget), 0);
- return *this;
- }
-
- template <class Get, class DocStrOrSet>
- self& add_property(char const* name, Get fget, DocStrOrSet docstr_or_set)
- {
- this->add_property_impl(name, this->make_getter(fget), docstr_or_set, 0);
- return *this;
- }
-
- template <class Get, class Set>
- self&
- add_property(char const* name, Get fget, Set fset, char const* docstr)
- {
- base::add_property(
- name, this->make_getter(fget), this->make_setter(fset), docstr);
- return *this;
- }
-# endif
template <class Get>
self& add_static_property(char const* name, Get fget)
diff --git a/boost/python/converter/arg_from_python.hpp b/boost/python/converter/arg_from_python.hpp
index e2edce7e1c..61bbaad570 100755..100644
--- a/boost/python/converter/arg_from_python.hpp
+++ b/boost/python/converter/arg_from_python.hpp
@@ -115,9 +115,9 @@ struct arg_rvalue_from_python
arg_rvalue_from_python(PyObject*);
bool convertible() const;
-# if BOOST_MSVC < 1301 || _MSC_FULL_VER > 13102196
+# if _MSC_FULL_VER > 13102196
typename arg_rvalue_from_python<T>::
-# endif
+# endif
result_type operator()();
private:
diff --git a/boost/python/converter/arg_to_python_base.hpp b/boost/python/converter/arg_to_python_base.hpp
index d85b302e48..c66ce9c3e0 100755..100644
--- a/boost/python/converter/arg_to_python_base.hpp
+++ b/boost/python/converter/arg_to_python_base.hpp
@@ -13,17 +13,9 @@ struct registration;
namespace detail
{
struct BOOST_PYTHON_DECL arg_to_python_base
-# if !defined(BOOST_MSVC) || BOOST_MSVC <= 1300 || _MSC_FULL_VER > 13102179
: handle<>
-# endif
{
arg_to_python_base(void const volatile* source, registration const&);
-# if defined(BOOST_MSVC) && BOOST_MSVC > 1300 && _MSC_FULL_VER <= 13102179
- PyObject* get() const { return m_ptr.get(); }
- PyObject* release() { return m_ptr.release(); }
- private:
- handle<> m_ptr;
-# endif
};
}
diff --git a/boost/python/converter/object_manager.hpp b/boost/python/converter/object_manager.hpp
index 84e44d475b..4668245545 100755..100644
--- a/boost/python/converter/object_manager.hpp
+++ b/boost/python/converter/object_manager.hpp
@@ -121,7 +121,6 @@ struct is_object_manager
{
};
-# ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
template <class T>
struct is_reference_to_object_manager
: mpl::false_
@@ -151,79 +150,6 @@ struct is_reference_to_object_manager<T const volatile&>
: is_object_manager<T>
{
};
-# else
-
-namespace detail
-{
- typedef char (&yes_reference_to_object_manager)[1];
- typedef char (&no_reference_to_object_manager)[2];
-
- // A number of nastinesses go on here in order to work around MSVC6
- // bugs.
- template <class T>
- struct is_object_manager_help
- {
- typedef typename mpl::if_<
- is_object_manager<T>
- , yes_reference_to_object_manager
- , no_reference_to_object_manager
- >::type type;
-
- // If we just use the type instead of the result of calling this
- // function, VC6 will ICE.
- static type call();
- };
-
- // A set of overloads for each cv-qualification. The same argument
- // is passed twice: the first one is used to unwind the cv*, and the
- // second one is used to avoid relying on partial ordering for
- // overload resolution.
- template <class U>
- typename is_object_manager_help<U>
- is_object_manager_helper(U*, void*);
-
- template <class U>
- typename is_object_manager_help<U>
- is_object_manager_helper(U const*, void const*);
-
- template <class U>
- typename is_object_manager_help<U>
- is_object_manager_helper(U volatile*, void volatile*);
-
- template <class U>
- typename is_object_manager_help<U>
- is_object_manager_helper(U const volatile*, void const volatile*);
-
- template <class T>
- struct is_reference_to_object_manager_nonref
- : mpl::false_
- {
- };
-
- template <class T>
- struct is_reference_to_object_manager_ref
- {
- static T sample_object;
- BOOST_STATIC_CONSTANT(
- bool, value
- = (sizeof(is_object_manager_helper(&sample_object, &sample_object).call())
- == sizeof(detail::yes_reference_to_object_manager)
- )
- );
- typedef mpl::bool_<value> type;
- };
-}
-
-template <class T>
-struct is_reference_to_object_manager
- : mpl::if_<
- is_reference<T>
- , detail::is_reference_to_object_manager_ref<T>
- , detail::is_reference_to_object_manager_nonref<T>
- >::type
-{
-};
-# endif
}}} // namespace boost::python::converter
diff --git a/boost/python/converter/registered.hpp b/boost/python/converter/registered.hpp
index 2404cb0ff2..68bb3c4a70 100644
--- a/boost/python/converter/registered.hpp
+++ b/boost/python/converter/registered.hpp
@@ -44,8 +44,7 @@ struct registered
{
};
-# if !defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) \
- && !BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1310))
+# if !BOOST_WORKAROUND(BOOST_MSVC, BOOST_TESTED_AT(1310))
// collapses a few more types to the same static instance. MSVC7.1
// fails to strip cv-qualification from array types in typeid. For
// some reason we can't use this collapse there or array converters
diff --git a/boost/python/converter/registered_pointee.hpp b/boost/python/converter/registered_pointee.hpp
index d9e7ac75a8..974cb6d810 100644
--- a/boost/python/converter/registered_pointee.hpp
+++ b/boost/python/converter/registered_pointee.hpp
@@ -14,7 +14,6 @@ namespace boost { namespace python { namespace converter {
struct registration;
-# ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
template <class T>
struct registered_pointee
: registered<
@@ -26,37 +25,6 @@ struct registered_pointee
>
{
};
-# else
-namespace detail
-{
- template <class T>
- struct registered_pointee_base
- {
- static registration const& converters;
- };
-}
-
-template <class T>
-struct registered_pointee
- : detail::registered_pointee_base<
- typename add_reference<
- typename add_cv<T>::type
- >::type
- >
-{
-};
-
-//
-// implementations
-//
-namespace detail
-{
- template <class T>
- registration const& registered_pointee_base<T>::converters
- = registry::lookup(pointer_type_id<T>());
-}
-
-# endif
}}} // namespace boost::python::converter
#endif // REGISTERED_POINTEE_DWA2002710_HPP
diff --git a/boost/python/copy_const_reference.hpp b/boost/python/copy_const_reference.hpp
index 19e3b42332..55bede136f 100644
--- a/boost/python/copy_const_reference.hpp
+++ b/boost/python/copy_const_reference.hpp
@@ -16,7 +16,7 @@ namespace detail
{
template <class R>
struct copy_const_reference_expects_a_const_reference_return_type
-# if defined(__GNUC__) && __GNUC__ >= 3 || defined(__EDG__)
+# if defined(__GNUC__) || defined(__EDG__)
{}
# endif
;
diff --git a/boost/python/copy_non_const_reference.hpp b/boost/python/copy_non_const_reference.hpp
index 78b70f5d3b..15fef62d67 100644
--- a/boost/python/copy_non_const_reference.hpp
+++ b/boost/python/copy_non_const_reference.hpp
@@ -16,7 +16,7 @@ namespace detail
{
template <class R>
struct copy_non_const_reference_expects_a_non_const_reference_return_type
-# if defined(__GNUC__) && __GNUC__ >= 3 || defined(__EDG__)
+# if defined(__GNUC__) || defined(__EDG__)
{}
# endif
;
diff --git a/boost/python/data_members.hpp b/boost/python/data_members.hpp
index b0851fb1b3..139bde3270 100644
--- a/boost/python/data_members.hpp
+++ b/boost/python/data_members.hpp
@@ -270,7 +270,7 @@ inline object make_getter(D& x)
return detail::make_getter(x, policy, is_member_pointer<D>(), 0L);
}
-# if !BOOST_WORKAROUND(__EDG_VERSION__, <= 238) && !BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
+# if !BOOST_WORKAROUND(__EDG_VERSION__, <= 238)
template <class D>
inline object make_getter(D const& d)
{
@@ -305,7 +305,7 @@ inline object make_setter(D& x)
return detail::make_setter(x, default_call_policies(), is_member_pointer<D>(), 0);
}
-# if !(BOOST_WORKAROUND(BOOST_MSVC, <= 1300) || BOOST_WORKAROUND(__EDG_VERSION__, <= 238))
+# if BOOST_WORKAROUND(__EDG_VERSION__, <= 238)
template <class D>
inline object make_setter(D const& x)
{
diff --git a/boost/python/default_call_policies.hpp b/boost/python/default_call_policies.hpp
index 3d32d2eb49..fcc242a924 100644
--- a/boost/python/default_call_policies.hpp
+++ b/boost/python/default_call_policies.hpp
@@ -23,7 +23,7 @@ namespace detail
{
// for "readable" error messages
template <class T> struct specify_a_return_value_policy_to_wrap_functions_returning
-# if defined(__GNUC__) && __GNUC__ >= 3 || defined(__EDG__)
+# if defined(__GNUC__) || defined(__EDG__)
{}
# endif
;
diff --git a/boost/python/detail/borrowed_ptr.hpp b/boost/python/detail/borrowed_ptr.hpp
index b88457b83a..d91d05c90f 100755..100644
--- a/boost/python/detail/borrowed_ptr.hpp
+++ b/boost/python/detail/borrowed_ptr.hpp
@@ -19,7 +19,6 @@ template<class T> class borrowed
typedef T type;
};
-# ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
template<typename T>
struct is_borrowed_ptr
{
@@ -68,35 +67,6 @@ struct is_borrowed_ptr<T*>
};
# endif
-# else // no partial specialization
-
-typedef char (&yes_borrowed_ptr_t)[1];
-typedef char (&no_borrowed_ptr_t)[2];
-
-no_borrowed_ptr_t is_borrowed_ptr_test(...);
-
-template <class T>
-typename mpl::if_c<
- is_pointer<T>::value
- , T
- , int
- >::type
-is_borrowed_ptr_test1(boost::type<T>);
-
-template<typename T>
-yes_borrowed_ptr_t is_borrowed_ptr_test(borrowed<T> const volatile*);
-
-template<typename T>
-class is_borrowed_ptr
-{
- public:
- BOOST_STATIC_CONSTANT(
- bool, value = (
- sizeof(detail::is_borrowed_ptr_test(is_borrowed_ptr_test1(boost::type<T>())))
- == sizeof(detail::yes_borrowed_ptr_t)));
-};
-
-# endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
}
diff --git a/boost/python/detail/config.hpp b/boost/python/detail/config.hpp
index 76595ebbfc..1857d39a40 100644
--- a/boost/python/detail/config.hpp
+++ b/boost/python/detail/config.hpp
@@ -29,9 +29,6 @@
# endif
# if defined(BOOST_MSVC)
-# if _MSC_VER < 1300
-# define BOOST_MSVC6_OR_EARLIER 1
-# endif
# pragma warning (disable : 4786) // disable truncated debug symbols
# pragma warning (disable : 4251) // disable exported dll function
diff --git a/boost/python/detail/construct.hpp b/boost/python/detail/construct.hpp
index 5f15d22c6e..e69fbc7538 100644
--- a/boost/python/detail/construct.hpp
+++ b/boost/python/detail/construct.hpp
@@ -8,13 +8,7 @@
namespace boost { namespace python { namespace detail {
template <class T, class Arg>
-void construct_pointee(void* storage, Arg& x
-# if !defined(BOOST_MSVC) || BOOST_MSVC > 1300
- , T const volatile*
-# else
- , T const*
-# endif
- )
+void construct_pointee(void* storage, Arg& x, T const volatile*)
{
new (storage) T(x);
}
diff --git a/boost/python/detail/cv_category.hpp b/boost/python/detail/cv_category.hpp
index 1765b36f8c..d32dd0fdbe 100644
--- a/boost/python/detail/cv_category.hpp
+++ b/boost/python/detail/cv_category.hpp
@@ -12,7 +12,7 @@ template <bool is_const_, bool is_volatile_>
struct cv_tag
{
BOOST_STATIC_CONSTANT(bool, is_const = is_const_);
- BOOST_STATIC_CONSTANT(bool, is_volatile = is_const_);
+ BOOST_STATIC_CONSTANT(bool, is_volatile = is_volatile_);
};
typedef cv_tag<false,false> cv_unqualified;
diff --git a/boost/python/detail/destroy.hpp b/boost/python/detail/destroy.hpp
index 0172dca28f..3ea6455330 100644
--- a/boost/python/detail/destroy.hpp
+++ b/boost/python/detail/destroy.hpp
@@ -7,25 +7,12 @@
# include <boost/type_traits/is_array.hpp>
# include <boost/detail/workaround.hpp>
-# if BOOST_WORKAROUND(BOOST_MSVC, == 1300)
-# include <boost/type_traits/is_enum.hpp>
-# endif
namespace boost { namespace python { namespace detail {
-template <
- bool array
-# if BOOST_WORKAROUND(BOOST_MSVC, == 1300)
- , bool enum_ // vc7 has a problem destroying enums
-# endif
- > struct value_destroyer;
+template <bool array> struct value_destroyer;
template <>
-struct value_destroyer<
- false
-# if BOOST_WORKAROUND(BOOST_MSVC, == 1300)
- , false
-# endif
- >
+struct value_destroyer<false>
{
template <class T>
static void execute(T const volatile* p)
@@ -35,12 +22,7 @@ struct value_destroyer<
};
template <>
-struct value_destroyer<
- true
-# if BOOST_WORKAROUND(BOOST_MSVC, == 1300)
- , false
-# endif
- >
+struct value_destroyer<true>
{
template <class A, class T>
static void execute(A*, T const volatile* const first)
@@ -49,9 +31,6 @@ struct value_destroyer<
{
value_destroyer<
boost::is_array<T>::value
-# if BOOST_WORKAROUND(BOOST_MSVC, == 1300)
- , boost::is_enum<T>::value
-# endif
>::execute(p);
}
}
@@ -63,25 +42,6 @@ struct value_destroyer<
}
};
-# if BOOST_WORKAROUND(BOOST_MSVC, == 1300)
-template <>
-struct value_destroyer<true,true>
-{
- template <class T>
- static void execute(T const volatile*)
- {
- }
-};
-
-template <>
-struct value_destroyer<false,true>
-{
- template <class T>
- static void execute(T const volatile*)
- {
- }
-};
-# endif
template <class T>
inline void destroy_referent_impl(void* p, T& (*)())
{
@@ -89,9 +49,6 @@ inline void destroy_referent_impl(void* p, T& (*)())
// must come *before* T for metrowerks
value_destroyer<
(boost::is_array<T>::value)
-# if BOOST_WORKAROUND(BOOST_MSVC, == 1300)
- , (boost::is_enum<T>::value)
-# endif
>::execute((const volatile T*)p);
}
diff --git a/boost/python/detail/enable_if.hpp b/boost/python/detail/enable_if.hpp
index 46a1d532b3..7a37be121a 100755..100644
--- a/boost/python/detail/enable_if.hpp
+++ b/boost/python/detail/enable_if.hpp
@@ -7,40 +7,7 @@
# include <boost/python/detail/sfinae.hpp>
# include <boost/detail/workaround.hpp>
-# if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
-# include <boost/mpl/if.hpp>
-
-namespace boost { namespace python { namespace detail {
-
-template <class T> struct always_void { typedef void type; };
-
-template <class C, class T = int>
-struct enable_if_arg
-{
- typedef typename mpl::if_<C,T,int&>::type type;
-};
-
-template <class C, class T = int>
-struct disable_if_arg
-{
- typedef typename mpl::if_<C,int&,T>::type type;
-};
-
-template <class C, class T = typename always_void<C>::type>
-struct enable_if_ret
-{
- typedef typename mpl::if_<C,T,int[2]>::type type;
-};
-
-template <class C, class T = typename always_void<C>::type>
-struct disable_if_ret
-{
- typedef typename mpl::if_<C,int[2],T>::type type;
-};
-
-}}} // namespace boost::python::detail
-
-# elif !defined(BOOST_NO_SFINAE)
+#if !defined(BOOST_NO_SFINAE)
# include <boost/utility/enable_if.hpp>
namespace boost { namespace python { namespace detail {
diff --git a/boost/python/detail/force_instantiate.hpp b/boost/python/detail/force_instantiate.hpp
index 63e2874945..a8901b2da7 100755..100644
--- a/boost/python/detail/force_instantiate.hpp
+++ b/boost/python/detail/force_instantiate.hpp
@@ -10,23 +10,9 @@ namespace boost { namespace python { namespace detail {
// Allows us to force the argument to be instantiated without
// incurring unused variable warnings
-# if !defined(BOOST_MSVC) || BOOST_MSVC < 1300 || _MSC_FULL_VER > 13102196
-
template <class T>
inline void force_instantiate(T const&) {}
-# else
-
-# pragma optimize("g", off)
-inline void force_instantiate_impl(...) {}
-# pragma optimize("", on)
-template <class T>
-inline void force_instantiate(T const& x)
-{
- detail::force_instantiate_impl(&x);
-}
-# endif
-
}}} // namespace boost::python::detail
#endif // FORCE_INSTANTIATE_DWA200265_HPP
diff --git a/boost/python/detail/if_else.hpp b/boost/python/detail/if_else.hpp
index 244e63a8ae..3f505c5edb 100644
--- a/boost/python/detail/if_else.hpp
+++ b/boost/python/detail/if_else.hpp
@@ -25,46 +25,11 @@ struct if_selected
};
};
-# if defined(BOOST_MSVC) && (BOOST_MSVC == 1300)
-namespace msvc70_aux {
-
-template< bool > struct inherit_from
-{
- template< typename T > struct result
- {
- typedef T type;
- };
-};
-
-template<> struct inherit_from<true>
-{
- template< typename T > struct result
- {
- struct type {};
- };
-};
-
-template< typename T >
-struct never_true
-{
- BOOST_STATIC_CONSTANT(bool, value = false);
-};
-
-} // namespace msvc70_aux
-
-#endif // # if defined(BOOST_MSVC) && (BOOST_MSVC == 1300)
-
template <class T>
struct elif_selected
{
-# if !(defined(BOOST_MSVC) && BOOST_MSVC <= 1300 || defined(__MWERKS__) && __MWERKS__ <= 0x2407)
+# if !(defined(__MWERKS__) && __MWERKS__ <= 0x2407)
template <class U> class then;
-# elif defined(BOOST_MSVC) && (BOOST_MSVC == 1300)
- template <class U>
- struct then : msvc70_aux::inherit_from< msvc70_aux::never_true<U>::value >
- ::template result< if_selected<T> >::type
- {
- };
# else
template <class U>
struct then : if_selected<T>
@@ -73,7 +38,7 @@ struct elif_selected
# endif
};
-# if !(defined(BOOST_MSVC) && BOOST_MSVC <= 1300 || defined(__MWERKS__) && __MWERKS__ <= 0x2407)
+# if !(defined(__MWERKS__) && __MWERKS__ <= 0x2407)
template <class T>
template <class U>
class elif_selected<T>::then : public if_selected<T>
diff --git a/boost/python/detail/msvc_typeinfo.hpp b/boost/python/detail/msvc_typeinfo.hpp
index 10f845058a..bfc84164f0 100644
--- a/boost/python/detail/msvc_typeinfo.hpp
+++ b/boost/python/detail/msvc_typeinfo.hpp
@@ -7,15 +7,18 @@
#include <typeinfo>
#include <boost/type.hpp>
-#include <boost/type_traits/config.hpp>
//
-// Fix for MSVC's broken typeid() implementation which doesn't strip
+// Fix for icc's broken typeid() implementation which doesn't strip
// decoration. This fix doesn't handle cv-qualified array types. It
// could probably be done, but I haven't figured it out yet.
//
-# if defined(BOOST_MSVC) && BOOST_MSVC <= 1300 || defined(BOOST_INTEL_CXX_VERSION) && BOOST_INTEL_CXX_VERSION <= 700
+// Note: This file is badly named. It initially was MSVC specific, but was
+// extended to cover intel too. Now the old version of MSVC is no longer
+// supported, but the intel version is still supported.
+
+# if defined(BOOST_INTEL_CXX_VERSION) && BOOST_INTEL_CXX_VERSION <= 700
namespace boost { namespace python { namespace detail {
@@ -44,8 +47,14 @@ inline typeinfo typeid_ref(type<T>*, ...)
return detail::typeid_ref_1((T(*)())0);
}
+#if defined(BOOST_MSVC) || (defined(__BORLANDC__) && !defined(BOOST_DISABLE_WIN32))
+# define BOOST_PYTT_DECL __cdecl
+#else
+# define BOOST_PYTT_DECL /**/
+#endif
+
template< typename T > T&(* is_ref_tester1(type<T>) )(type<T>) { return 0; }
-inline char BOOST_TT_DECL is_ref_tester1(...) { return 0; }
+inline char BOOST_PYTT_DECL is_ref_tester1(...) { return 0; }
template <class T>
inline typeinfo msvc_typeid(boost::type<T>*)
@@ -71,5 +80,5 @@ inline typeinfo assert_array_typeid_compiles()
}}} // namespace boost::python::detail
-# endif // BOOST_MSVC
+# endif // BOOST_INTEL_CXX_VERSION
#endif // MSVC_TYPEINFO_DWA200222_HPP
diff --git a/boost/python/detail/referent_storage.hpp b/boost/python/detail/referent_storage.hpp
index 0a1ef5a04e..2cddf696d5 100644
--- a/boost/python/detail/referent_storage.hpp
+++ b/boost/python/detail/referent_storage.hpp
@@ -42,7 +42,6 @@ union aligned_storage
// but sizeof() is broken in CodeWarriors <= 8.0
template <class T> struct referent_size;
-# ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
template <class T>
struct referent_size<T&>
@@ -51,15 +50,6 @@ union aligned_storage
std::size_t, value = sizeof(T));
};
-# else
-
- template <class T> struct referent_size
- {
- static T f();
- BOOST_STATIC_CONSTANT(std::size_t, value = sizeof(f()));
- };
-
-# endif
// A metafunction returning a POD type which can store U, where T ==
// U&. If T is not a reference type, returns a POD which can store T.
diff --git a/boost/python/detail/result.hpp b/boost/python/detail/result.hpp
index 9b8b486423..8ccc3c5029 100644
--- a/boost/python/detail/result.hpp
+++ b/boost/python/detail/result.hpp
@@ -43,9 +43,7 @@ namespace boost { namespace python { namespace detail {
template <class R, class T>
boost::type<R>* result(R (T::*), int = 0) { return 0; }
-# if (defined(BOOST_MSVC) && _MSC_FULL_VER <= 13102140) \
- || (defined(__GNUC__) && __GNUC__ < 3) \
- || (defined(__MWERKS__) && __MWERKS__ < 0x3000)
+# if (defined(__MWERKS__) && __MWERKS__ < 0x3000)
// This code actually works on all implementations, but why use it when we don't have to?
template <class T>
struct get_result_type
diff --git a/boost/python/detail/string_literal.hpp b/boost/python/detail/string_literal.hpp
index 50193b6436..a56e72ec6b 100644
--- a/boost/python/detail/string_literal.hpp
+++ b/boost/python/detail/string_literal.hpp
@@ -14,7 +14,6 @@
namespace boost { namespace python { namespace detail {
-# ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
template <class T>
struct is_string_literal : mpl::false_
{
@@ -45,43 +44,6 @@ struct is_string_literal<T[n]>
{
};
# endif
-# else
-template <bool is_array = true>
-struct string_literal_helper
-{
- typedef char (&yes_string_literal)[1];
- typedef char (&no_string_literal)[2];
-
- template <class T>
- struct apply
- {
- typedef apply<T> self;
- static T x;
- static yes_string_literal check(char const*);
- static no_string_literal check(char*);
- static no_string_literal check(void const volatile*);
-
- BOOST_STATIC_CONSTANT(
- bool, value = sizeof(self::check(x)) == sizeof(yes_string_literal));
- typedef mpl::bool_<value> type;
- };
-};
-
-template <>
-struct string_literal_helper<false>
-{
- template <class T>
- struct apply : mpl::false_
- {
- };
-};
-
-template <class T>
-struct is_string_literal
- : string_literal_helper<is_array<T>::value>::apply<T>
-{
-};
-# endif
}}} // namespace boost::python::detail
diff --git a/boost/python/detail/type_list.hpp b/boost/python/detail/type_list.hpp
index 9483c1945c..0ad3f63d84 100644
--- a/boost/python/detail/type_list.hpp
+++ b/boost/python/detail/type_list.hpp
@@ -30,10 +30,6 @@
# include <boost/mpl/vector/vector10.hpp>
# endif
-# ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
# include <boost/python/detail/type_list_impl.hpp>
-# else
-# include <boost/python/detail/type_list_impl_no_pts.hpp>
-# endif
#endif // TYPE_LIST_DWA2002913_HPP
diff --git a/boost/python/detail/type_list_impl_no_pts.hpp b/boost/python/detail/type_list_impl_no_pts.hpp
deleted file mode 100644
index 15d9252374..0000000000
--- a/boost/python/detail/type_list_impl_no_pts.hpp
+++ /dev/null
@@ -1,107 +0,0 @@
-#ifndef BOOST_PP_IS_ITERATING
-// Copyright David Abrahams 2002.
-// Distributed under the Boost Software License, Version 1.0. (See
-// accompanying file LICENSE_1_0.txt or copy at
-// http://www.boost.org/LICENSE_1_0.txt)
-# ifndef TYPE_LIST_IMPL_NO_PTS_DWA2002913_HPP
-# define TYPE_LIST_IMPL_NO_PTS_DWA2002913_HPP
-
-# include <boost/python/detail/type_list.hpp>
-
-# include <boost/preprocessor/enum_params.hpp>
-# include <boost/preprocessor/enum_params_with_a_default.hpp>
-# include <boost/preprocessor/cat.hpp>
-# include <boost/preprocessor/repeat.hpp>
-# include <boost/preprocessor/empty.hpp>
-# include <boost/preprocessor/iterate.hpp>
-# include <boost/mpl/void.hpp>
-
-namespace boost { namespace python { namespace detail {
-
-template< typename T >
-struct is_list_arg
-{
- enum { value = true };
-};
-
-template<>
-struct is_list_arg<mpl::void_>
-{
- enum { value = false };
-};
-
-template<int> struct type_list_impl_chooser;
-
-# define BOOST_PYTHON_LIST_ACTUAL_PARAMS BOOST_PP_ENUM_PARAMS_Z(1,BOOST_PYTHON_LIST_SIZE,T)
-# define BOOST_PYTHON_LIST_FORMAL_PARAMS BOOST_PP_ENUM_PARAMS_Z(1,BOOST_PYTHON_LIST_SIZE,class T)
-
-# define BOOST_PP_ITERATION_PARAMS_1 \
- (3, (0, BOOST_PYTHON_LIST_SIZE, <boost/python/detail/type_list_impl_no_pts.hpp>))
-# include BOOST_PP_ITERATE()
-
-# define BOOST_PYTHON_PLUS() +
-# define BOOST_PYTHON_IS_LIST_ARG(z, n, data) \
- BOOST_PP_IF(n, BOOST_PYTHON_PLUS, BOOST_PP_EMPTY)() \
- is_list_arg< BOOST_PP_CAT(T,n) >::value
-
-template<
- BOOST_PYTHON_LIST_FORMAL_PARAMS
- >
-struct type_list_count_args
-{
- enum { value =
- BOOST_PP_REPEAT_1(BOOST_PYTHON_LIST_SIZE, BOOST_PYTHON_IS_LIST_ARG, _)
- };
-};
-
-template<
- BOOST_PYTHON_LIST_FORMAL_PARAMS
- >
-struct type_list_impl
-{
- typedef type_list_count_args< BOOST_PYTHON_LIST_ACTUAL_PARAMS > arg_num_;
- typedef typename detail::type_list_impl_chooser< arg_num_::value >
- ::template result_< BOOST_PYTHON_LIST_ACTUAL_PARAMS >::type type;
-};
-
-template<
- BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(BOOST_PYTHON_LIST_SIZE, class T, mpl::void_)
- >
-struct type_list
- : detail::type_list_impl< BOOST_PYTHON_LIST_ACTUAL_PARAMS >::type
-{
- typedef typename detail::type_list_impl<
- BOOST_PYTHON_LIST_ACTUAL_PARAMS
- >::type type;
-};
-
-# undef BOOST_PYTHON_IS_LIST_ARG
-# undef BOOST_PYTHON_PLUS
-# undef BOOST_PYTHON_LIST_FORMAL_PARAMS
-# undef BOOST_PYTHON_LIST_ACTUAL_PARAMS
-
-}}} // namespace boost::python::detail
-
-# endif // TYPE_LIST_IMPL_NO_PTS_DWA2002913_HPP
-
-#else // BOOST_PP_IS_ITERATING
-
-# define N BOOST_PP_ITERATION()
-
-template<>
-struct type_list_impl_chooser<N>
-{
- template<
- BOOST_PYTHON_LIST_FORMAL_PARAMS
- >
- struct result_
- {
- typedef typename BOOST_PP_CAT(mpl::vector,N)<
- BOOST_PP_ENUM_PARAMS(N, T)
- >::type type;
- };
-};
-
-# undef N
-
-#endif // BOOST_PP_IS_ITERATING
diff --git a/boost/python/detail/value_is_xxx.hpp b/boost/python/detail/value_is_xxx.hpp
index 2b12564907..fbb9defd0b 100644
--- a/boost/python/detail/value_is_xxx.hpp
+++ b/boost/python/detail/value_is_xxx.hpp
@@ -9,35 +9,6 @@
# include <boost/mpl/bool.hpp>
# include <boost/preprocessor/enum_params.hpp>
-# if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
-# include <boost/type_traits/is_reference.hpp>
-# include <boost/type_traits/add_reference.hpp>
-
-# define BOOST_PYTHON_VALUE_IS_XXX_DEF(name, qualified_name, nargs) \
-template <class X_> \
-struct value_is_##name \
-{ \
- typedef char yes; \
- typedef char (&no)[2]; \
- \
- static typename add_reference<X_>::type dummy; \
- \
- template < BOOST_PP_ENUM_PARAMS_Z(1, nargs, class U) > \
- static yes test( \
- qualified_name< BOOST_PP_ENUM_PARAMS_Z(1, nargs, U) > const&, int \
- ); \
- \
- template <class U> \
- static no test(U&, ...); \
- \
- BOOST_STATIC_CONSTANT( \
- bool, value \
- = (sizeof(test(dummy, 0)) == sizeof(yes))); \
- \
- typedef mpl::bool_<value> type; \
-};
-
-# else
# include <boost/type_traits/remove_reference.hpp>
# include <boost/type_traits/remove_cv.hpp>
@@ -57,6 +28,5 @@ struct value_is_##name \
\
};
-# endif
#endif // VALUE_IS_XXX_DWA2003224_HPP
diff --git a/boost/python/extract.hpp b/boost/python/extract.hpp
index 544c61f070..bfdeb83ce7 100644
--- a/boost/python/extract.hpp
+++ b/boost/python/extract.hpp
@@ -21,8 +21,7 @@
# include <boost/python/detail/void_return.hpp>
# include <boost/call_traits.hpp>
-#if BOOST_WORKAROUND(BOOST_MSVC, <= 1300) || BOOST_WORKAROUND(BOOST_INTEL_WIN, <= 900)
-// workaround for VC++ 6.x or 7.0
+#if BOOST_WORKAROUND(BOOST_INTEL_WIN, <= 900)
# define BOOST_EXTRACT_WORKAROUND ()
#else
# define BOOST_EXTRACT_WORKAROUND
diff --git a/boost/python/handle.hpp b/boost/python/handle.hpp
index 461a219ad8..ee9a7cd09d 100755..100644
--- a/boost/python/handle.hpp
+++ b/boost/python/handle.hpp
@@ -87,8 +87,6 @@ class handle
return *this;
}
-#if !defined(BOOST_MSVC) || (BOOST_MSVC >= 1300)
-
template<typename Y>
handle& operator=(handle<Y> const & r) // never throws
{
@@ -97,8 +95,6 @@ class handle
return *this;
}
-#endif
-
template <typename Y>
handle(handle<Y> const& r)
: m_p(python::xincref(python::upcast<T>(r.get())))
@@ -159,7 +155,6 @@ typedef handle<PyTypeObject> type_handle;
//
// Compile-time introspection
//
-# ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
template<typename T>
class is_handle
{
@@ -173,28 +168,6 @@ class is_handle<handle<T> >
public:
BOOST_STATIC_CONSTANT(bool, value = true);
};
-# else
-namespace detail
-{
- typedef char (&yes_handle_t)[1];
- typedef char (&no_handle_t)[2];
-
- no_handle_t is_handle_test(...);
-
- template<typename T>
- yes_handle_t is_handle_test(boost::type< handle<T> >);
-}
-
-template<typename T>
-class is_handle
-{
- public:
- BOOST_STATIC_CONSTANT(
- bool, value = (
- sizeof(detail::is_handle_test(boost::type<T>()))
- == sizeof(detail::yes_handle_t)));
-};
-# endif
//
// implementations
diff --git a/boost/python/init.hpp b/boost/python/init.hpp
index 6598fd3547..b82ab01e15 100644
--- a/boost/python/init.hpp
+++ b/boost/python/init.hpp
@@ -76,27 +76,6 @@ namespace detail
//
// This metaprogram checks if T is an optional
//
-#if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION)
-
- template <class T>
- struct is_optional {
-
- private:
-
- template <BOOST_PYTHON_OVERLOAD_TYPES>
- static boost::type_traits::yes_type f(optional<BOOST_PYTHON_OVERLOAD_ARGS>);
- static boost::type_traits::no_type f(...);
- static T t();
-
- public:
-
- BOOST_STATIC_CONSTANT(
- bool, value =
- sizeof(f(t())) == sizeof(::boost::type_traits::yes_type));
- typedef mpl::bool_<value> type;
- };
-
-#else
template <class T>
struct is_optional
@@ -108,7 +87,6 @@ namespace detail
: mpl::true_
{};
-#endif
template <int NDefaults>
struct define_class_init_helper;
diff --git a/boost/python/make_constructor.hpp b/boost/python/make_constructor.hpp
index 8ae722bbe3..47cdf469c7 100644
--- a/boost/python/make_constructor.hpp
+++ b/boost/python/make_constructor.hpp
@@ -104,14 +104,6 @@ namespace detail
// If the BasePolicy_ supplied a result converter it would be
// ignored; issue an error if it's not the default.
-#if defined _MSC_VER && _MSC_VER < 1300
- typedef is_same<
- typename BasePolicy_::result_converter
- , default_result_converter
- > same_result_converter;
- //see above for explanation
- BOOST_STATIC_ASSERT(same_result_converter::value) ;
-#else
BOOST_MPL_ASSERT_MSG(
(is_same<
typename BasePolicy_::result_converter
@@ -120,7 +112,6 @@ namespace detail
, MAKE_CONSTRUCTOR_SUPPLIES_ITS_OWN_RESULT_CONVERTER_THAT_WOULD_OVERRIDE_YOURS
, (typename BasePolicy_::result_converter)
);
-#endif
typedef constructor_result_converter result_converter;
typedef offset_args<typename BasePolicy_::argument_package, mpl::int_<1> > argument_package;
};
diff --git a/boost/python/manage_new_object.hpp b/boost/python/manage_new_object.hpp
index d81421dace..9585b13a6f 100644
--- a/boost/python/manage_new_object.hpp
+++ b/boost/python/manage_new_object.hpp
@@ -17,7 +17,7 @@ namespace detail
{
template <class R>
struct manage_new_object_requires_a_pointer_return_type
-# if defined(__GNUC__) && __GNUC__ >= 3 || defined(__EDG__)
+# if defined(__GNUC__) || defined(__EDG__)
{}
# endif
;
diff --git a/boost/python/object/class_metadata.hpp b/boost/python/object/class_metadata.hpp
index 155ae35d06..c71cf67c4e 100644
--- a/boost/python/object/class_metadata.hpp
+++ b/boost/python/object/class_metadata.hpp
@@ -53,11 +53,7 @@ struct register_base_of
template <class Base>
inline void operator()(Base*) const
{
-# if !BOOST_WORKAROUND(BOOST_MSVC, == 1200)
BOOST_MPL_ASSERT_NOT((is_same<Base,Derived>));
-# else
- BOOST_STATIC_ASSERT(!(is_same<Base,Derived>::value));
-# endif
// Register the Base class
register_dynamic_id<Base>();
diff --git a/boost/python/object/forward.hpp b/boost/python/object/forward.hpp
index 2faf3321ec..30613d8ebd 100644
--- a/boost/python/object/forward.hpp
+++ b/boost/python/object/forward.hpp
@@ -12,13 +12,7 @@
# include <boost/ref.hpp>
# include <boost/python/detail/value_arg.hpp>
# include <boost/python/detail/copy_ctor_mutates_rhs.hpp>
-# if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
-# include <boost/type_traits/is_enum.hpp>
-# include <boost/mpl/and.hpp>
-# include <boost/mpl/not.hpp>
-# else
-# include <boost/mpl/or.hpp>
-# endif
+# include <boost/mpl/or.hpp>
namespace boost { namespace python { namespace objects {
@@ -42,24 +36,13 @@ struct reference_to_value
template <class T>
struct forward
: mpl::if_<
-# if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
- // vc6 chokes on unforwarding enums nested in classes
- mpl::and_<
- is_scalar<T>
- , mpl::not_<
- is_enum<T>
- >
- >
-# else
mpl::or_<python::detail::copy_ctor_mutates_rhs<T>, is_scalar<T> >
-# endif
, T
, reference_to_value<T>
>
{
};
-# ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
template<typename T>
struct unforward
{
@@ -86,88 +69,6 @@ struct unforward_cref<reference_to_value<T> >
{
};
-# else // no partial specialization
-
-namespace detail
-{
- typedef char (&yes_reference_to_value_t)[1];
- typedef char (&no_reference_to_value_t)[2];
-
- no_reference_to_value_t is_reference_to_value_test(...);
-
- template<typename T>
- yes_reference_to_value_t is_reference_to_value_test(boost::type< reference_to_value<T> >);
-
- template<bool wrapped>
- struct unforwarder
- {
- template <class T>
- struct apply
- {
- typedef typename unwrap_reference<T>::type& type;
- };
- };
-
- template<>
- struct unforwarder<true>
- {
- template <class T>
- struct apply
- {
- typedef typename T::reference type;
- };
- };
-
- template<bool wrapped = false>
- struct cref_unforwarder
- {
- template <class T>
- struct apply
- : python::detail::value_arg<
- typename unwrap_reference<T>::type
- >
- {
- };
- };
-
- template<>
- struct cref_unforwarder<true>
- {
- template <class T>
- struct apply
- : python::detail::value_arg<
- typename T::reference
- >
- {
- };
- };
-
- template<typename T>
- struct is_reference_to_value
- {
- BOOST_STATIC_CONSTANT(
- bool, value = (
- sizeof(is_reference_to_value_test(boost::type<T>()))
- == sizeof(yes_reference_to_value_t)));
- typedef mpl::bool_<value> type;
- };
-}
-
-template <typename T>
-struct unforward
- : public detail::unforwarder<
- detail::is_reference_to_value<T>::value
- >::template apply<T>
-{};
-
-template <typename T>
-struct unforward_cref
- : public detail::cref_unforwarder<
- detail::is_reference_to_value<T>::value
- >::template apply<T>
-{};
-
-# endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
template <class T>
typename reference_to_value<T>::reference
diff --git a/boost/python/object/iterator.hpp b/boost/python/object/iterator.hpp
index ab748fe82d..db5224713f 100644
--- a/boost/python/object/iterator.hpp
+++ b/boost/python/object/iterator.hpp
@@ -71,35 +71,7 @@ struct iterator_range
# endif
};
-# ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
- // for compilers which can't deduce the value_type of pointers, we
- // have a special implementation of next. This takes advantage of
- // the fact that T* results are treated like T& results by
- // Boost.Python's function wrappers.
- struct next_ptr
- {
- typedef Iterator result_type;
-
- result_type
- operator()(iterator_range<NextPolicies,Iterator>& self)
- {
- if (self.m_start == self.m_finish)
- stop_iteration_error();
- return self.m_start++;
- }
- };
-
- typedef mpl::if_<
- is_same<
- boost::detail::please_invoke_BOOST_TT_BROKEN_COMPILER_SPEC_on_cv_unqualified_pointee<Iterator>
- , typename traits_t::value_type
- >
- , next_ptr
- , next
- >::type next_fn;
-# else
typedef next next_fn;
-# endif
object m_sequence; // Keeps the sequence alive while iterating.
Iterator m_start;
diff --git a/boost/python/object/pointer_holder.hpp b/boost/python/object/pointer_holder.hpp
index 4627e34ad2..27d95193a0 100644
--- a/boost/python/object/pointer_holder.hpp
+++ b/boost/python/object/pointer_holder.hpp
@@ -46,11 +46,7 @@ template <class T> class wrapper;
namespace boost { namespace python { namespace objects {
-# if BOOST_WORKAROUND(__GNUC__, == 2)
-# define BOOST_PYTHON_UNFORWARD_LOCAL(z, n, _) BOOST_PP_COMMA_IF(n) (typename unforward<A##n>::type)objects::do_unforward(a##n,0)
-# else
-# define BOOST_PYTHON_UNFORWARD_LOCAL(z, n, _) BOOST_PP_COMMA_IF(n) objects::do_unforward(a##n,0)
-# endif
+#define BOOST_PYTHON_UNFORWARD_LOCAL(z, n, _) BOOST_PP_COMMA_IF(n) objects::do_unforward(a##n,0)
template <class Pointer, class Value>
struct pointer_holder : instance_holder
diff --git a/boost/python/object/value_holder.hpp b/boost/python/object/value_holder.hpp
index f4d452cab1..a4e91786d1 100644
--- a/boost/python/object/value_holder.hpp
+++ b/boost/python/object/value_holder.hpp
@@ -33,11 +33,7 @@
namespace boost { namespace python { namespace objects {
-# if BOOST_WORKAROUND(__GNUC__, == 2)
-# define BOOST_PYTHON_UNFORWARD_LOCAL(z, n, _) BOOST_PP_COMMA_IF(n) (typename unforward<A##n>::type)objects::do_unforward(a##n,0)
-# else
-# define BOOST_PYTHON_UNFORWARD_LOCAL(z, n, _) BOOST_PP_COMMA_IF(n) objects::do_unforward(a##n,0)
-# endif
+#define BOOST_PYTHON_UNFORWARD_LOCAL(z, n, _) BOOST_PP_COMMA_IF(n) objects::do_unforward(a##n,0)
template <class Value>
struct value_holder : instance_holder
diff --git a/boost/python/object_core.hpp b/boost/python/object_core.hpp
index 9c9dc10bfc..6185779667 100644
--- a/boost/python/object_core.hpp
+++ b/boost/python/object_core.hpp
@@ -36,12 +36,6 @@
# include <boost/type_traits/is_convertible.hpp>
# include <boost/type_traits/remove_reference.hpp>
-# if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
-# include <boost/type_traits/add_pointer.hpp>
-# endif
-
-# include <boost/mpl/if.hpp>
-
namespace boost { namespace python {
namespace detail
@@ -98,11 +92,7 @@ namespace api
class object_operators : public def_visitor<U>
{
protected:
-# if !defined(BOOST_MSVC) || BOOST_MSVC >= 1300
typedef object const& object_cref;
-# else
- typedef object object_cref;
-# endif
public:
// function call
//
@@ -139,25 +129,11 @@ namespace api
template <class T>
const_object_item
- operator[](T const& key) const
-# if !defined(BOOST_MSVC) || BOOST_MSVC > 1300
- ;
-# else
- {
- return (*this)[object(key)];
- }
-# endif
+ operator[](T const& key) const;
template <class T>
object_item
- operator[](T const& key)
-# if !defined(BOOST_MSVC) || BOOST_MSVC > 1300
- ;
-# else
- {
- return (*this)[object(key)];
- }
-# endif
+ operator[](T const& key);
// slicing
//
@@ -175,29 +151,11 @@ namespace api
template <class T, class V>
const_object_slice
- slice(T const& start, V const& end) const
-# if !defined(BOOST_MSVC) || BOOST_MSVC > 1300
- ;
-# else
- {
- return this->slice(
- slice_bound<T>::type(start)
- , slice_bound<V>::type(end));
- }
-# endif
+ slice(T const& start, V const& end) const;
template <class T, class V>
object_slice
- slice(T const& start, V const& end)
-# if !defined(BOOST_MSVC) || BOOST_MSVC > 1300
- ;
-# else
- {
- return this->slice(
- slice_bound<T>::type(start)
- , slice_bound<V>::type(end));
- }
-# endif
+ slice(T const& start, V const& end);
private: // def visitation for adding callable objects as class methods
@@ -248,26 +206,6 @@ namespace api
PyObject* m_ptr;
};
-# ifdef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
- template <class T, class U>
- struct is_derived_impl
- {
- static T x;
- template <class X>
- static X* to_pointer(X const&);
-
- static char test(U const*);
- typedef char (&no)[2];
- static no test(...);
-
- BOOST_STATIC_CONSTANT(bool, value = sizeof(test(to_pointer(x))) == 1);
- };
-
- template <class T, class U>
- struct is_derived
- : mpl::bool_<is_derived_impl<T,U>::value>
- {};
-# else
template <class T, class U>
struct is_derived
: is_convertible<
@@ -275,28 +213,13 @@ namespace api
, U const*
>
{};
-# endif
template <class T>
typename objects::unforward_cref<T>::type do_unforward_cref(T const& x)
{
-# if BOOST_WORKAROUND(__GNUC__, == 2)
- typedef typename objects::unforward_cref<T>::type ret;
- return ret(x);
-# else
return x;
-# endif
}
-# if BOOST_WORKAROUND(__GNUC__, == 2)
- // GCC 2.x has non-const string literals; this hacks around that problem.
- template <unsigned N>
- char const (& do_unforward_cref(char const(&x)[N]) )[N]
- {
- return x;
- }
-# endif
-
class object;
template <class T>
@@ -323,14 +246,7 @@ namespace api
// explicit conversion from any C++ object to Python
template <class T>
- explicit object(
- T const& x
-# if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
- // use some SFINAE to un-confuse MSVC about its
- // copy-initialization ambiguity claim.
- , typename mpl::if_<is_proxy<T>,int&,int>::type* = 0
-# endif
- )
+ explicit object(T const& x)
: object_base(object_base_initializer(x))
{
}
@@ -348,7 +264,7 @@ namespace api
// Macros for forwarding constructors in classes derived from
// object. Derived classes will usually want these as an
// implementation detail
-# define BOOST_PYTHON_FORWARD_OBJECT_CONSTRUCTORS_(derived, base) \
+# define BOOST_PYTHON_FORWARD_OBJECT_CONSTRUCTORS(derived, base) \
inline explicit derived(::boost::python::detail::borrowed_reference p) \
: base(p) {} \
inline explicit derived(::boost::python::detail::new_reference p) \
@@ -356,23 +272,6 @@ namespace api
inline explicit derived(::boost::python::detail::new_non_null_reference p) \
: base(p) {}
-# if !defined(BOOST_MSVC) || BOOST_MSVC >= 1300
-# define BOOST_PYTHON_FORWARD_OBJECT_CONSTRUCTORS BOOST_PYTHON_FORWARD_OBJECT_CONSTRUCTORS_
-# else
- // MSVC6 has a bug which causes an explicit template constructor to
- // be preferred over an appropriate implicit conversion operator
- // declared on the argument type. Normally, that would cause a
- // runtime failure when using extract<T> to extract a type with a
- // templated constructor. This additional constructor will turn that
- // runtime failure into an ambiguity error at compile-time due to
- // the lack of partial ordering, or at least a link-time error if no
- // generalized template constructor is declared.
-# define BOOST_PYTHON_FORWARD_OBJECT_CONSTRUCTORS(derived, base) \
- BOOST_PYTHON_FORWARD_OBJECT_CONSTRUCTORS_(derived, base) \
- template <class T> \
- explicit derived(extract<T> const&);
-# endif
-
//
// object_initializer -- get the handle to construct the object with,
// based on whether T is a proxy or derived from object
diff --git a/boost/python/object_items.hpp b/boost/python/object_items.hpp
index f0761dadbb..b048689a7c 100755..100644
--- a/boost/python/object_items.hpp
+++ b/boost/python/object_items.hpp
@@ -44,7 +44,6 @@ object_operators<U>::operator[](object_cref key) const
return const_object_item(x, key);
}
-# if !defined(BOOST_MSVC) || BOOST_MSVC > 1300
template <class U>
template <class T>
inline const_object_item
@@ -60,8 +59,6 @@ object_operators<U>::operator[](T const& key)
{
return (*this)[object(key)];
}
-# endif
-
inline object const_item_policies::get(object const& target, object const& key)
{
diff --git a/boost/python/object_slices.hpp b/boost/python/object_slices.hpp
index 748c2e954b..6cd3dc2974 100644
--- a/boost/python/object_slices.hpp
+++ b/boost/python/object_slices.hpp
@@ -99,7 +99,7 @@ object_operators<U>::slice(object_cref start, slice_nil) const
object_cref2 x = *static_cast<U const*>(this);
return const_object_slice(x, api::slice_key(borrowed(start.ptr()), allow_null((PyObject*)0)));
}
-# if !defined(BOOST_MSVC) || BOOST_MSVC > 1300
+
template <class U>
template <class T, class V>
inline const_object_slice
@@ -119,8 +119,6 @@ object_operators<U>::slice(T const& start, V const& end)
typename slice_bound<T>::type(start)
, typename slice_bound<V>::type(end));
}
-# endif
-
inline object const_slice_policies::get(object const& target, key_type const& key)
{
diff --git a/boost/python/opaque_pointer_converter.hpp b/boost/python/opaque_pointer_converter.hpp
index 10eb4234c8..e95c49bbfe 100644
--- a/boost/python/opaque_pointer_converter.hpp
+++ b/boost/python/opaque_pointer_converter.hpp
@@ -172,28 +172,19 @@ PyTypeObject opaque<Pointee>::type_object =
};
}} // namespace boost::python
-# if BOOST_WORKAROUND(BOOST_MSVC, <= 1300)
-
-# define BOOST_PYTHON_OPAQUE_SPECIALIZED_TYPE_ID(Pointee)
-
-# else
-
// If you change the below, don't forget to alter the end of type_id.hpp
# define BOOST_PYTHON_OPAQUE_SPECIALIZED_TYPE_ID(Pointee) \
namespace boost { namespace python { \
template<> \
- inline type_info type_id<Pointee>(BOOST_PYTHON_EXPLICIT_TT_DEF(Pointee)) \
+ inline type_info type_id<Pointee>() \
{ \
return type_info (typeid (Pointee *)); \
} \
template<> \
- inline type_info type_id<const volatile Pointee&>( \
- BOOST_PYTHON_EXPLICIT_TT_DEF(const volatile Pointee&)) \
+ inline type_info type_id<const volatile Pointee&>() \
{ \
return type_info (typeid (Pointee *)); \
} \
}}
-# endif
-
# endif // OPAQUE_POINTER_CONVERTER_HPP_
diff --git a/boost/python/other.hpp b/boost/python/other.hpp
index eeece99b7d..24a24ad8d1 100755..100644
--- a/boost/python/other.hpp
+++ b/boost/python/other.hpp
@@ -7,9 +7,7 @@
// accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
-# if _MSC_VER+0 >= 1020
-# pragma once
-# endif
+# pragma once
# include <boost/config.hpp>
@@ -20,7 +18,6 @@ template<class T> struct other
typedef T type;
};
-# ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
namespace detail
{
template<typename T>
@@ -51,63 +48,6 @@ namespace detail
typedef T type;
};
}
-# else // no partial specialization
-
-}} // namespace boost::python
-
-#include <boost/type.hpp>
-
-namespace boost { namespace python {
-
-namespace detail
-{
- typedef char (&yes_other_t)[1];
- typedef char (&no_other_t)[2];
-
- no_other_t is_other_test(...);
-
- template<typename T>
- yes_other_t is_other_test(type< other<T> >);
-
- template<bool wrapped>
- struct other_unwrapper
- {
- template <class T>
- struct apply
- {
- typedef T type;
- };
- };
-
- template<>
- struct other_unwrapper<true>
- {
- template <class T>
- struct apply
- {
- typedef typename T::type type;
- };
- };
-
- template<typename T>
- class is_other
- {
- public:
- BOOST_STATIC_CONSTANT(
- bool, value = (
- sizeof(detail::is_other_test(type<T>()))
- == sizeof(detail::yes_other_t)));
- };
-
- template <typename T>
- class unwrap_other
- : public detail::other_unwrapper<
- is_other<T>::value
- >::template apply<T>
- {};
-}
-
-# endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
}} // namespace boost::python
diff --git a/boost/python/proxy.hpp b/boost/python/proxy.hpp
index a956eac1cc..d3331d5676 100755..100644
--- a/boost/python/proxy.hpp
+++ b/boost/python/proxy.hpp
@@ -15,11 +15,7 @@ class proxy : public object_operators<proxy<Policies> >
{
typedef typename Policies::key_type key_type;
-# if !defined(BOOST_MSVC) || BOOST_MSVC >= 1300
typedef proxy const& assignment_self;
-# else
- typedef proxy assignment_self;
-# endif
public:
proxy(object const& target, key_type const& key);
operator object() const;
diff --git a/boost/python/ptr.hpp b/boost/python/ptr.hpp
index af1339c426..287daba458 100644
--- a/boost/python/ptr.hpp
+++ b/boost/python/ptr.hpp
@@ -11,9 +11,7 @@
// Copyright (C) 1999, 2000 Jaakko Jarvi (jaakko.jarvi@cs.utu.fi)
// Copyright (C) 2001 Peter Dimov
-# if _MSC_VER+0 >= 1020
-# pragma once
-# endif
+# pragma once
# include <boost/config.hpp>
# include <boost/mpl/bool.hpp>
@@ -38,7 +36,6 @@ inline pointer_wrapper<T> ptr(T t)
return pointer_wrapper<T>(t);
}
-# ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
template<typename T>
class is_pointer_wrapper
: public mpl::false_
@@ -64,64 +61,6 @@ class unwrap_pointer<pointer_wrapper<T> >
public:
typedef T type;
};
-# else // no partial specialization
-
-}} // namespace boost::python
-
-#include <boost/type.hpp>
-
-namespace boost { namespace python {
-
-namespace detail
-{
- typedef char (&yes_pointer_wrapper_t)[1];
- typedef char (&no_pointer_wrapper_t)[2];
-
- no_pointer_wrapper_t is_pointer_wrapper_test(...);
-
- template<typename T>
- yes_pointer_wrapper_t is_pointer_wrapper_test(boost::type< pointer_wrapper<T> >);
-
- template<bool wrapped>
- struct pointer_unwrapper
- {
- template <class T>
- struct apply
- {
- typedef T type;
- };
- };
-
- template<>
- struct pointer_unwrapper<true>
- {
- template <class T>
- struct apply
- {
- typedef typename T::type type;
- };
- };
-}
-
-template<typename T>
-class is_pointer_wrapper
-{
- public:
- BOOST_STATIC_CONSTANT(
- bool, value = (
- sizeof(detail::is_pointer_wrapper_test(boost::type<T>()))
- == sizeof(detail::yes_pointer_wrapper_t)));
- typedef mpl::bool_<value> type;
-};
-
-template <typename T>
-class unwrap_pointer
- : public detail::pointer_unwrapper<
- is_pointer_wrapper<T>::value
- >::template apply<T>
-{};
-
-# endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
}} // namespace boost::python
diff --git a/boost/python/pure_virtual.hpp b/boost/python/pure_virtual.hpp
index b3b34ffcdb..58e9aedef1 100755..100644
--- a/boost/python/pure_virtual.hpp
+++ b/boost/python/pure_virtual.hpp
@@ -47,7 +47,7 @@ namespace detail
// replaced by void, and whose first argument is replaced by C&.
template <class C, class S>
typename replace_front2<S,void,C&>::type
- error_signature(S BOOST_APPEND_EXPLICIT_TEMPLATE_TYPE(C))
+ error_signature(S)
{
typedef typename replace_front2<S,void,C&>::type r;
return r();
diff --git a/boost/python/reference_existing_object.hpp b/boost/python/reference_existing_object.hpp
index bb8ddf7380..8c2410715b 100644
--- a/boost/python/reference_existing_object.hpp
+++ b/boost/python/reference_existing_object.hpp
@@ -17,7 +17,7 @@ namespace detail
{
template <class R>
struct reference_existing_object_requires_a_pointer_or_reference_return_type
-# if defined(__GNUC__) && __GNUC__ >= 3 || defined(__EDG__)
+# if defined(__GNUC__) || defined(__EDG__)
{}
# endif
;
diff --git a/boost/python/register_ptr_to_python.hpp b/boost/python/register_ptr_to_python.hpp
index 7a22fe5052..d39bd0cf71 100644
--- a/boost/python/register_ptr_to_python.hpp
+++ b/boost/python/register_ptr_to_python.hpp
@@ -12,7 +12,7 @@
namespace boost { namespace python {
template <class P>
-void register_ptr_to_python(BOOST_EXPLICIT_TEMPLATE_TYPE(P))
+void register_ptr_to_python()
{
typedef typename boost::python::pointee<P>::type X;
objects::class_value_wrapper<
diff --git a/boost/python/return_arg.hpp b/boost/python/return_arg.hpp
index c36f898d7d..e869a58d12 100755..100644
--- a/boost/python/return_arg.hpp
+++ b/boost/python/return_arg.hpp
@@ -29,7 +29,7 @@ namespace detail
{
template <std::size_t>
struct return_arg_pos_argument_must_be_positive
-# if defined(__GNUC__) && __GNUC__ >= 3 || defined(__EDG__)
+# if defined(__GNUC__) || defined(__EDG__)
{}
# endif
;
diff --git a/boost/python/return_internal_reference.hpp b/boost/python/return_internal_reference.hpp
index acb89e6dc8..cc60f4422a 100644
--- a/boost/python/return_internal_reference.hpp
+++ b/boost/python/return_internal_reference.hpp
@@ -18,7 +18,7 @@ namespace detail
{
template <std::size_t>
struct return_internal_reference_owner_arg_must_be_greater_than_zero
-# if defined(__GNUC__) && __GNUC__ >= 3 || defined(__EDG__)
+# if defined(__GNUC__) || defined(__EDG__)
{}
# endif
;
diff --git a/boost/python/suite/indexing/indexing_suite.hpp b/boost/python/suite/indexing/indexing_suite.hpp
index b636b2111c..40301fdff5 100644
--- a/boost/python/suite/indexing/indexing_suite.hpp
+++ b/boost/python/suite/indexing/indexing_suite.hpp
@@ -131,11 +131,7 @@ namespace boost { namespace python {
typedef detail::container_element<Container, Index, DerivedPolicies>
container_element_t;
-#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
- struct return_policy : return_internal_reference<> {};
-#else
typedef return_internal_reference<> return_policy;
-#endif
typedef typename mpl::if_<
no_proxy
diff --git a/boost/python/to_python_converter.hpp b/boost/python/to_python_converter.hpp
index 378d159e97..4391b6dce9 100644
--- a/boost/python/to_python_converter.hpp
+++ b/boost/python/to_python_converter.hpp
@@ -48,12 +48,7 @@ template < class T, class Conversion, bool has_get_pytype=false >
struct to_python_converter
{
#ifndef BOOST_PYTHON_NO_PY_SIGNATURES
-#if 0 //defined _MSC_VER && _MSC_VER >=1310
- //probably other compilers could come here as well
- typedef typename detail::test_get_pytype<Conversion> HasGetPytype;
-#else
typedef boost::mpl::bool_<has_get_pytype> HasGetPytype;
-#endif
static PyTypeObject const* get_pytype_1(boost::mpl::true_ *)
{
diff --git a/boost/python/to_python_value.hpp b/boost/python/to_python_value.hpp
index a48948d256..aaabb9cf75 100644
--- a/boost/python/to_python_value.hpp
+++ b/boost/python/to_python_value.hpp
@@ -147,11 +147,6 @@ namespace detail
template <class T>
inline PyObject* registry_to_python_value<T>::operator()(argument_type x) const
{
- typedef converter::registered<argument_type> r;
-# if BOOST_WORKAROUND(__GNUC__, < 3)
- // suppresses an ICE, somehow
- (void)r::converters;
-# endif
return converter::registered<argument_type>::converters.to_python(&x);
}
diff --git a/boost/python/type_id.hpp b/boost/python/type_id.hpp
index 4a5727d514..38b7f7b453 100644
--- a/boost/python/type_id.hpp
+++ b/boost/python/type_id.hpp
@@ -15,11 +15,9 @@
# include <boost/static_assert.hpp>
# include <boost/detail/workaround.hpp>
# include <boost/type_traits/same_traits.hpp>
-# include <boost/type_traits/broken_compiler_spec.hpp>
# ifndef BOOST_PYTHON_HAVE_GCC_CP_DEMANGLE
# if defined(__GNUC__) \
- && ((__GNUC__ > 3) || ((__GNUC__ == 3) && (__GNUC_MINOR__ >= 1))) \
&& !defined(__EDG_VERSION__)
# define BOOST_PYTHON_HAVE_GCC_CP_DEMANGLE
# endif
@@ -30,7 +28,7 @@ namespace boost { namespace python {
// for this compiler at least, cross-shared-library type_info
// comparisons don't work, so use typeid(x).name() instead. It's not
// yet clear what the best default strategy is.
-# if (defined(__GNUC__) && __GNUC__ >= 3) \
+# if defined(__GNUC__) \
|| defined(_AIX) \
|| ( defined(__sgi) && defined(__host_mips)) \
|| (defined(__hpux) && defined(__HP_aCC)) \
@@ -69,21 +67,18 @@ struct type_info : private totally_ordered<type_info>
base_id_t m_base_type;
};
-# ifdef BOOST_NO_EXPLICIT_FUNCTION_TEMPLATE_ARGUMENTS
-# define BOOST_PYTHON_EXPLICIT_TT_DEF(T) ::boost::type<T>*
-# else
-# define BOOST_PYTHON_EXPLICIT_TT_DEF(T)
-# endif
+
+// This macro is obsolete. Port away and remove.
+# define BOOST_PYTHON_EXPLICIT_TT_DEF(T)
template <class T>
-inline type_info type_id(BOOST_EXPLICIT_TEMPLATE_TYPE(T))
+inline type_info type_id()
{
return type_info(
# if !defined(_MSC_VER) \
- || (!BOOST_WORKAROUND(BOOST_MSVC, <= 1300) \
- && !BOOST_WORKAROUND(BOOST_INTEL_CXX_VERSION, <= 700))
+ || !BOOST_WORKAROUND(BOOST_INTEL_CXX_VERSION, <= 700)
typeid(T)
-# else // strip the decoration which msvc and Intel mistakenly leave in
+# else // strip the decoration which Intel mistakenly leaves in
python::detail::msvc_typeid((boost::type<T>*)0)
# endif
);
@@ -99,7 +94,7 @@ inline type_info type_id(BOOST_EXPLICIT_TEMPLATE_TYPE(T))
# define BOOST_PYTHON_SIGNED_INTEGRAL_TYPE_ID(T) \
template <> \
-inline type_info type_id<T>(BOOST_PYTHON_EXPLICIT_TT_DEF(T)) \
+inline type_info type_id<T>() \
{ \
return type_info(typeid(T)); \
}
@@ -171,22 +166,19 @@ inline char const* type_info::name() const
BOOST_PYTHON_DECL std::ostream& operator<<(std::ostream&, type_info const&);
-# if !BOOST_WORKAROUND(BOOST_MSVC, == 1200)
template<>
-inline type_info type_id<void>(BOOST_PYTHON_EXPLICIT_TT_DEF(void))
+inline type_info type_id<void>()
{
return type_info (typeid (void *));
}
# ifndef BOOST_NO_CV_VOID_SPECIALIZATIONS
template<>
-inline type_info type_id<const volatile void>(BOOST_PYTHON_EXPLICIT_TT_DEF(const volatile void))
+inline type_info type_id<const volatile void>()
{
return type_info (typeid (void *));
}
# endif
-# endif
-
}} // namespace boost::python
#endif // TYPE_ID_DWA2002517_HPP
diff --git a/boost/python/with_custodian_and_ward.hpp b/boost/python/with_custodian_and_ward.hpp
index 9399478f23..3431c6f22c 100644
--- a/boost/python/with_custodian_and_ward.hpp
+++ b/boost/python/with_custodian_and_ward.hpp
@@ -85,14 +85,10 @@ struct with_custodian_and_ward_postcall : BasePolicy_
static PyObject* postcall(ArgumentPackage const& args_, PyObject* result)
{
std::size_t arity_ = detail::arity(args_);
-#if BOOST_WORKAROUND(BOOST_MSVC, < 1300)
- if ( custodian > arity_ || ward > arity_ )
-#else
// check if either custodian or ward exceeds the arity
// (this weird formulation avoids "always false" warnings
// for arity_ = 0)
if ( (std::max)(custodian, ward) > arity_ )
-#endif
{
PyErr_SetString(
PyExc_IndexError