]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/parameter/test/literate/exercising-the-code-so-far0.cpp
2 #include <boost/parameter.hpp>
3 #include <boost/mpl/is_sequence.hpp>
4 #include <boost/noncopyable.hpp>
5 #include <boost/type_traits/is_class.hpp>
7 #include <boost/config.hpp>
9 using namespace boost::parameter
;
11 namespace boost
{ namespace python
{
13 BOOST_PARAMETER_TEMPLATE_KEYWORD(class_type
)
14 BOOST_PARAMETER_TEMPLATE_KEYWORD(base_list
)
15 BOOST_PARAMETER_TEMPLATE_KEYWORD(held_type
)
16 BOOST_PARAMETER_TEMPLATE_KEYWORD(copyable
)
18 template <class B
= int>
23 namespace boost
{ namespace python
{
27 typedef parameter::parameters
<
28 required
<tag::class_type
, boost::is_class
<_
> >
29 , parameter::optional
<tag::base_list
, mpl::is_sequence
<_
> >
30 , parameter::optional
<tag::held_type
>
31 , parameter::optional
<tag::copyable
>
36 namespace boost
{ namespace python
{
40 , class A1
= parameter::void_
41 , class A2
= parameter::void_
42 , class A3
= parameter::void_
46 // Create ArgumentPack
48 class_signature::bind
<A0
,A1
,A2
,A3
>::type
51 // Extract first logical parameter.
52 typedef typename
parameter::value_type
<
53 args
, tag::class_type
>::type class_type
;
55 typedef typename
parameter::value_type
<
56 args
, tag::base_list
, bases
<> >::type base_list
;
58 typedef typename
parameter::value_type
<
59 args
, tag::held_type
, class_type
>::type held_type
;
61 typedef typename
parameter::value_type
<
62 args
, tag::copyable
, void>::type copyable
;
68 using boost::python::class_type
;
69 using boost::python::copyable
;
70 using boost::python::held_type
;
71 using boost::python::base_list
;
72 using boost::python::bases
;
76 typedef boost::python::class_
<
77 class_type
<B
>, copyable
<boost::noncopyable
>
80 typedef boost::python::class_
<
82 #if defined(BOOST_NO_CXX11_SMART_PTR)
84 D
, held_type
<std::auto_ptr
<D
> >, base_list
<bases
<B
> >
88 D
, held_type
<std::unique_ptr
<D
> >, base_list
<bases
<B
> >
94 BOOST_MPL_ASSERT((boost::is_same
<c1::class_type
, B
>));
95 BOOST_MPL_ASSERT((boost::is_same
<c1::base_list
, bases
<> >));
96 BOOST_MPL_ASSERT((boost::is_same
<c1::held_type
, B
>));
98 boost::is_same
<c1::copyable
, boost::noncopyable
>
101 BOOST_MPL_ASSERT((boost::is_same
<c2::class_type
, D
>));
102 BOOST_MPL_ASSERT((boost::is_same
<c2::base_list
, bases
<B
> >));
104 #if defined(BOOST_NO_CXX11_SMART_PTR)
107 boost::is_same
<c2::held_type
, std::auto_ptr
<D
> >
113 boost::is_same
<c2::held_type
, std::unique_ptr
<D
> >
118 BOOST_MPL_ASSERT((boost::is_same
<c2::copyable
, void>));