Chris@16: // Copyright David Abrahams 2003. 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: #ifndef VALUE_IS_XXX_DWA2003224_HPP Chris@16: # define VALUE_IS_XXX_DWA2003224_HPP Chris@16: Chris@16: # include Chris@16: # include Chris@16: # include Chris@16: Chris@16: # if defined(BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION) Chris@16: # include Chris@16: # include Chris@16: Chris@16: # define BOOST_PYTHON_VALUE_IS_XXX_DEF(name, qualified_name, nargs) \ Chris@16: template \ Chris@16: struct value_is_##name \ Chris@16: { \ Chris@16: typedef char yes; \ Chris@16: typedef char (&no)[2]; \ Chris@16: \ Chris@16: static typename add_reference::type dummy; \ Chris@16: \ Chris@16: template < BOOST_PP_ENUM_PARAMS_Z(1, nargs, class U) > \ Chris@16: static yes test( \ Chris@16: qualified_name< BOOST_PP_ENUM_PARAMS_Z(1, nargs, U) > const&, int \ Chris@16: ); \ Chris@16: \ Chris@16: template \ Chris@16: static no test(U&, ...); \ Chris@16: \ Chris@16: BOOST_STATIC_CONSTANT( \ Chris@16: bool, value \ Chris@16: = (sizeof(test(dummy, 0)) == sizeof(yes))); \ Chris@16: \ Chris@16: typedef mpl::bool_ type; \ Chris@16: }; Chris@16: Chris@16: # else Chris@16: Chris@16: # include Chris@16: # include Chris@16: # include Chris@16: Chris@16: # define BOOST_PYTHON_VALUE_IS_XXX_DEF(name, qualified_name, nargs) \ Chris@16: template \ Chris@16: struct value_is_##name \ Chris@16: { \ Chris@16: BOOST_PYTHON_IS_XXX_DEF(name,qualified_name,nargs) \ Chris@16: BOOST_STATIC_CONSTANT(bool, value = is_##name< \ Chris@16: typename remove_cv< \ Chris@16: typename remove_reference::type \ Chris@16: >::type \ Chris@16: >::value); \ Chris@16: typedef mpl::bool_ type; \ Chris@16: \ Chris@16: }; Chris@16: Chris@16: # endif Chris@16: Chris@16: #endif // VALUE_IS_XXX_DWA2003224_HPP