#include namespace boost { namespace python { BOOST_PARAMETER_TEMPLATE_KEYWORD(class_type) BOOST_PARAMETER_TEMPLATE_KEYWORD(base_list) BOOST_PARAMETER_TEMPLATE_KEYWORD(held_type) BOOST_PARAMETER_TEMPLATE_KEYWORD(copyable) }} namespace boost { namespace python { namespace detail { struct bases_base { }; } template struct bases : detail::bases_base { }; }} #include #include #include #include #include #include #include #include #include #if !defined(BOOST_TT_HAS_CONFORMING_IS_CLASS_IMPLEMENTATION) || \ !(1 == BOOST_TT_HAS_CONFORMING_IS_CLASS_IMPLEMENTATION) #include #endif namespace boost { namespace python { typedef boost::parameter::parameters< boost::parameter::required< tag::class_type #if defined(BOOST_TT_HAS_CONFORMING_IS_CLASS_IMPLEMENTATION) && \ (1 == BOOST_TT_HAS_CONFORMING_IS_CLASS_IMPLEMENTATION) , boost::mpl::if_< boost::is_class , boost::mpl::true_ , boost::mpl::false_ > #else , boost::mpl::if_< boost::is_scalar , boost::mpl::false_ , boost::mpl::true_ > #endif > , boost::parameter::optional< boost::parameter::deduced , boost::mpl::if_< boost::is_base_of , boost::mpl::true_ , boost::mpl::false_ > > , boost::parameter::optional< boost::parameter::deduced , boost::mpl::eval_if< boost::is_base_of , boost::mpl::false_ , boost::mpl::if_< boost::is_same , boost::mpl::false_ , boost::mpl::true_ > > > , boost::parameter::optional< boost::parameter::deduced , boost::mpl::if_< boost::is_same , boost::mpl::true_ , boost::mpl::false_ > > > class_signature; template < typename A0 , typename A1 = boost::parameter::void_ , typename A2 = boost::parameter::void_ , typename A3 = boost::parameter::void_ > struct class_ { // Create ArgumentPack typedef typename boost::python::class_signature::BOOST_NESTED_TEMPLATE bind::type args; // Extract first logical parameter. typedef typename boost::parameter::value_type< args,boost::python::tag::class_type >::type class_type; typedef typename boost::parameter::value_type< args,boost::python::tag::base_list,boost::python::bases<> >::type base_list; typedef typename boost::parameter::value_type< args,boost::python::tag::held_type,class_type >::type held_type; typedef typename boost::parameter::value_type< args,boost::python::tag::copyable,void >::type copyable; }; }} struct B { }; struct D { }; typedef boost::python::class_ c1; #include #if defined(BOOST_NO_CXX11_SMART_PTR) typedef boost::python::class_,boost::python::bases > c2; #else typedef boost::python::class_< D,std::unique_ptr,boost::python::bases > c2; #endif #include #include MPL_TEST_CASE() { BOOST_MPL_ASSERT(( boost::mpl::if_< boost::is_same , boost::mpl::true_ , boost::mpl::false_ >::type )); BOOST_MPL_ASSERT(( boost::mpl::if_< boost::is_same > , boost::mpl::true_ , boost::mpl::false_ >::type )); BOOST_MPL_ASSERT(( boost::mpl::if_< boost::is_same , boost::mpl::true_ , boost::mpl::false_ >::type )); BOOST_MPL_ASSERT(( boost::mpl::if_< boost::is_same , boost::mpl::true_ , boost::mpl::false_ >::type )); BOOST_MPL_ASSERT(( boost::mpl::if_< boost::is_same , boost::mpl::true_ , boost::mpl::false_ >::type )); BOOST_MPL_ASSERT(( boost::mpl::if_< boost::is_same > , boost::mpl::true_ , boost::mpl::false_ >::type )); #if defined(BOOST_NO_CXX11_SMART_PTR) BOOST_MPL_ASSERT(( boost::mpl::if_< boost::is_same > , boost::mpl::true_ , boost::mpl::false_ >::type )); #else BOOST_MPL_ASSERT(( boost::mpl::if_< boost::is_same > , boost::mpl::true_ , boost::mpl::false_ >::type )); #endif // BOOST_NO_CXX11_SMART_PTR BOOST_MPL_ASSERT(( boost::mpl::if_< boost::is_same , boost::mpl::true_ , boost::mpl::false_ >::type )); }