From 087c09cc652d386ca754f3f5b7783e8fa860e758 Mon Sep 17 00:00:00 2001 From: Joel de Guzman Date: Wed, 21 Aug 2002 13:47:02 +0000 Subject: [PATCH] VC6 Workaronds (cleanup) [SVN r15027] --- include/boost/python/detail/defaults_def.hpp | 18 ++++-- include/boost/python/signature.hpp | 63 ++++++++++++-------- 2 files changed, 50 insertions(+), 31 deletions(-) diff --git a/include/boost/python/detail/defaults_def.hpp b/include/boost/python/detail/defaults_def.hpp index 2b7f1375..f7105b6f 100644 --- a/include/boost/python/detail/defaults_def.hpp +++ b/include/boost/python/detail/defaults_def.hpp @@ -48,6 +48,9 @@ namespace detail { // 5. char const* name: doc string // /////////////////////////////////////////////////////////////////////////////// +template +struct define_stub_function {}; + #define BOOST_PP_ITERATION_PARAMS_1 \ (3, (0, BOOST_PYTHON_MAX_ARITY, )) @@ -81,7 +84,7 @@ namespace detail { def(char const* name, StubsT stubs, HolderT& holder, char const* doc) { // define the NTH stub function of stubs - define_stub_function(name, stubs, holder, boost::mpl::int_t(), doc); + define_stub_function::define(name, stubs, holder, doc); // call the next define_with_defaults_helper define_with_defaults_helper::def(name, stubs, holder, doc); } @@ -96,7 +99,7 @@ namespace detail { def(char const* name, StubsT stubs, HolderT& holder, char const* doc) { // define the Oth stub function of stubs - define_stub_function(name, stubs, holder, boost::mpl::int_t<0>(), doc); + define_stub_function<0>::define(name, stubs, holder, doc); // return } }; @@ -134,7 +137,7 @@ namespace detail { typedef typename mpl::at<0, SigT>::type nth_type; typedef typename StubsT::v_type v_type; typedef typename StubsT::nv_type nv_type; - + typedef typename mpl::select_type< boost::is_same::value , v_type @@ -159,14 +162,16 @@ namespace detail { #else // defined(BOOST_PP_IS_ITERATING) // PP vertical iteration code +template <> +struct define_stub_function { + template - inline void - define_stub_function + static void + define ( char const* name, StubsT, HolderT& holder, - boost::mpl::int_t, char const* doc ) { @@ -176,5 +181,6 @@ namespace detail { default_call_policies(), doc); } +}; #endif // !defined(BOOST_PP_IS_ITERATING) diff --git a/include/boost/python/signature.hpp b/include/boost/python/signature.hpp index e5134b20..65d90a6d 100644 --- a/include/boost/python/signature.hpp +++ b/include/boost/python/signature.hpp @@ -38,7 +38,7 @@ namespace boost { namespace python { // signature void C::foo(int, int) const // /////////////////////////////////////////////////////////////////////////////// -template +template struct signature {}; namespace detail { @@ -47,42 +47,42 @@ namespace detail { // // The following macros generate expansions for: // -// template +// template // inline boost::mpl::type_list // get_signature(signature) // { // return boost::mpl::type_list(); // } // -// template +// template // inline boost::mpl::type_list // get_signature(RT(*)(T0...TN)) // { // return boost::mpl::type_list(); // } // -// template +// template // inline boost::mpl::type_list // get_signature(signature) // { // return boost::mpl::type_list(); // } // -// template +// template // inline boost::mpl::type_list // get_signature(signature) // { // return boost::mpl::type_list(); // } // -// template +// template // inline boost::mpl::type_list // get_signature(RT(ClassT::*)(T0...TN))) // { // return boost::mpl::type_list(); // } // -// template +// template // inline boost::mpl::type_list // get_signature(RT(ClassT::*)(T0...TN) const)) // { @@ -93,7 +93,7 @@ namespace detail { // and arguments of the input signature and stuffs them in an mpl::type_list. // /////////////////////////////////////////////////////////////////////////////// -#define BPL_IMPL_TEMPLATE_GEN(INDEX, DATA) class BOOST_PP_CAT(T, INDEX) +#define BPL_IMPL_TEMPLATE_GEN(INDEX, DATA) typename BOOST_PP_CAT(T, INDEX) /////////////////////////////////////////////////////////////////////////////// #define BOOST_PP_ITERATION_PARAMS_1 \ @@ -113,10 +113,12 @@ namespace detail { #else // defined(BOOST_PP_IS_ITERATING) // PP vertical iteration code -# if !(defined(BOOST_MSVC) && (BOOST_MSVC <= 1300)) +/////////////////////////////////////////////////////////////////////////////// +#if !(defined(BOOST_MSVC) && (BOOST_MSVC <= 1200)) + template < - class RT BOOST_PP_COMMA_IF(BOOST_PP_ITERATION()) + typename RT BOOST_PP_COMMA_IF(BOOST_PP_ITERATION()) BOOST_PP_ENUM ( BOOST_PP_ITERATION(), @@ -139,9 +141,14 @@ get_signature >(); } +#endif // !(defined(BOOST_MSVC) && (BOOST_MSVC <= 1200)) + +/////////////////////////////////////// +#if !(defined(BOOST_MSVC) && (BOOST_MSVC <= 1300)) + template < - class RT BOOST_PP_COMMA_IF(BOOST_PP_ITERATION()) + typename RT BOOST_PP_COMMA_IF(BOOST_PP_ITERATION()) BOOST_PP_ENUM ( BOOST_PP_ITERATION(), @@ -164,12 +171,12 @@ get_signature >(); } -# endif // !(defined(BOOST_MSVC) && (BOOST_MSVC <= 1300)) +#endif // !(defined(BOOST_MSVC) && (BOOST_MSVC <= 1300)) /////////////////////////////////////// template < - class RT BOOST_PP_COMMA_IF(BOOST_PP_ITERATION()) + typename RT BOOST_PP_COMMA_IF(BOOST_PP_ITERATION()) BOOST_PP_ENUM ( BOOST_PP_ITERATION(), @@ -193,11 +200,13 @@ get_signature } /////////////////////////////////////////////////////////////////////////////// -# if BOOST_PP_ITERATION() <= (BOOST_PYTHON_MAX_ARITY - 2) +#if BOOST_PP_ITERATION() <= (BOOST_PYTHON_MAX_ARITY - 2) + +#if !(defined(BOOST_MSVC) && (BOOST_MSVC <= 1200)) template < - class RT, class ClassT BOOST_PP_COMMA_IF(BOOST_PP_ITERATION()) + typename RT, typename ClassT BOOST_PP_COMMA_IF(BOOST_PP_ITERATION()) BOOST_PP_ENUM ( BOOST_PP_ITERATION(), @@ -220,17 +229,19 @@ get_signature (); } -# if !(defined(BOOST_MSVC) && (BOOST_MSVC <= 1300)) -template < - class RT - , class ClassT BOOST_PP_COMMA_IF(BOOST_PP_ITERATION()) - BOOST_PP_ENUM( +/////////////////////////////////////// +template +< + typename RT, typename ClassT BOOST_PP_COMMA_IF(BOOST_PP_ITERATION()) + BOOST_PP_ENUM + ( BOOST_PP_ITERATION(), BPL_IMPL_TEMPLATE_GEN, BOOST_PP_EMPTY ) > -inline boost::mpl::type_list< +inline boost::mpl::type_list +< RT, ClassT BOOST_PP_COMMA_IF(BOOST_PP_ITERATION()) BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), T) > @@ -244,11 +255,13 @@ get_signature BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), T) >(); } -# endif +#endif // !(defined(BOOST_MSVC) && (BOOST_MSVC <= 1200)) + +/////////////////////////////////////// template < - class RT, class ClassT BOOST_PP_COMMA_IF(BOOST_PP_ITERATION()) + typename RT, typename ClassT BOOST_PP_COMMA_IF(BOOST_PP_ITERATION()) BOOST_PP_ENUM ( BOOST_PP_ITERATION(), @@ -274,7 +287,7 @@ get_signature /////////////////////////////////////// template < - class RT, class ClassT BOOST_PP_COMMA_IF(BOOST_PP_ITERATION()) + typename RT, typename ClassT BOOST_PP_COMMA_IF(BOOST_PP_ITERATION()) BOOST_PP_ENUM ( BOOST_PP_ITERATION(), @@ -299,6 +312,6 @@ get_signature >(); } -# endif // BOOST_PP_ITERATION() < (BOOST_PYTHON_MAX_ARITY - 2) +#endif // BOOST_PP_ITERATION() < (BOOST_PYTHON_MAX_ARITY - 2) #endif // !defined(BOOST_PP_IS_ITERATING)