Chris@16: #if !defined(BOOST_PP_IS_ITERATING) Chris@16: Chris@16: // Copyright David Abrahams 2002. Chris@16: // Distributed under the Boost Software License, Version 1.0. (See Chris@16: // accompanying file LICENSE_1_0.txt or copy at Chris@16: // http://www.boost.org/LICENSE_1_0.txt) Chris@16: Chris@16: # ifndef TARGET_DWA2002521_HPP Chris@16: # define TARGET_DWA2002521_HPP Chris@16: Chris@16: # include Chris@16: Chris@16: # include Chris@16: Chris@16: # include Chris@16: # include Chris@16: # include Chris@16: # include Chris@16: # include Chris@16: # include Chris@16: Chris@16: namespace boost { namespace python { namespace detail { Chris@16: Chris@16: # define BOOST_PP_ITERATION_PARAMS_1 \ Chris@16: (4, (0, BOOST_PYTHON_MAX_ARITY, , BOOST_PYTHON_FUNCTION_POINTER)) Chris@16: # include BOOST_PP_ITERATE() Chris@16: Chris@16: # define BOOST_PP_ITERATION_PARAMS_1 \ Chris@16: (4, (0, BOOST_PYTHON_CV_COUNT - 1, , BOOST_PYTHON_POINTER_TO_MEMBER)) Chris@16: # include BOOST_PP_ITERATE() Chris@16: Chris@16: template Chris@16: T& (* target(R (T::*)) )() { return 0; } Chris@16: Chris@16: }}} // namespace boost::python::detail Chris@16: Chris@16: # endif // TARGET_DWA2002521_HPP Chris@16: Chris@16: /* --------------- function pointers --------------- */ Chris@16: // For gcc 4.4 compatability, we must include the Chris@16: // BOOST_PP_ITERATION_DEPTH test inside an #else clause. Chris@16: #else // BOOST_PP_IS_ITERATING Chris@16: #if BOOST_PP_ITERATION_DEPTH() == 1 && BOOST_PP_ITERATION_FLAGS() == BOOST_PYTHON_FUNCTION_POINTER Chris@16: # if !(BOOST_WORKAROUND(__MWERKS__, > 0x3100) \ Chris@16: && BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3201))) Chris@16: # line BOOST_PP_LINE(__LINE__, target.hpp(function_pointers)) Chris@16: # endif Chris@16: Chris@16: # define N BOOST_PP_ITERATION() Chris@16: Chris@16: template Chris@16: BOOST_PP_IF(N, A0, void)(* target(R (*)(BOOST_PP_ENUM_PARAMS_Z(1, N, A))) )() Chris@16: { Chris@16: return 0; Chris@16: } Chris@16: Chris@16: # undef N Chris@16: Chris@16: /* --------------- pointers-to-members --------------- */ Chris@16: #elif BOOST_PP_ITERATION_DEPTH() == 1 && BOOST_PP_ITERATION_FLAGS() == BOOST_PYTHON_POINTER_TO_MEMBER Chris@16: // Outer over cv-qualifiers Chris@16: Chris@16: # define BOOST_PP_ITERATION_PARAMS_2 (3, (0, BOOST_PYTHON_MAX_ARITY, )) Chris@16: # include BOOST_PP_ITERATE() Chris@16: Chris@16: #elif BOOST_PP_ITERATION_DEPTH() == 2 Chris@16: # if !(BOOST_WORKAROUND(__MWERKS__, > 0x3100) \ Chris@16: && BOOST_WORKAROUND(__MWERKS__, BOOST_TESTED_AT(0x3201))) Chris@16: # line BOOST_PP_LINE(__LINE__, target.hpp(pointers-to-members)) Chris@16: # endif Chris@16: // Inner over arities Chris@16: Chris@16: # define N BOOST_PP_ITERATION() Chris@16: # define Q BOOST_PYTHON_CV_QUALIFIER(BOOST_PP_RELATIVE_ITERATION(1)) Chris@16: Chris@16: template Chris@16: T& (* target(R (T::*)(BOOST_PP_ENUM_PARAMS_Z(1, N, A)) Q) )() Chris@16: { Chris@16: return 0; Chris@16: } Chris@16: Chris@16: # undef N Chris@16: # undef Q Chris@16: Chris@16: #endif // BOOST_PP_ITERATION_DEPTH() Chris@16: #endif