]>
git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/parameter/test/literate/deduced-template-parameters0.cpp
2 #include <boost/parameter.hpp>
3 #include <boost/mpl/is_sequence.hpp>
4 #include <boost/noncopyable.hpp>
7 using namespace boost::parameter
;
10 namespace boost
{ namespace python
{
12 BOOST_PARAMETER_TEMPLATE_KEYWORD(class_type
)
13 BOOST_PARAMETER_TEMPLATE_KEYWORD(base_list
)
14 BOOST_PARAMETER_TEMPLATE_KEYWORD(held_type
)
15 BOOST_PARAMETER_TEMPLATE_KEYWORD(copyable
)
18 namespace boost
{ namespace python
{
20 namespace detail
{ struct bases_base
{}; }
22 template <class A0
= void, class A1
= void, class A2
= void >
23 struct bases
: detail::bases_base
29 #include <boost/type_traits/is_class.hpp>
30 namespace boost
{ namespace python
{
31 typedef parameter::parameters
<
32 required
<tag::class_type
, is_class
<_
> >
34 , parameter::optional
<
35 deduced
<tag::base_list
>
36 , is_base_and_derived
<detail::bases_base
,_
>
39 , parameter::optional
<
40 deduced
<tag::held_type
>
43 is_base_and_derived
<detail::bases_base
,_
>
44 , is_same
<noncopyable
,_
>
49 , parameter::optional
<deduced
<tag::copyable
>, is_same
<noncopyable
,_
> >
54 , class A1
= parameter::void_
55 , class A2
= parameter::void_
56 , class A3
= parameter::void_
60 // Create ArgumentPack
62 class_signature::bind
<A0
,A1
,A2
,A3
>::type
65 // Extract first logical parameter.
66 typedef typename
parameter::value_type
<
67 args
, tag::class_type
>::type class_type
;
69 typedef typename
parameter::value_type
<
70 args
, tag::base_list
, bases
<> >::type base_list
;
72 typedef typename
parameter::value_type
<
73 args
, tag::held_type
, class_type
>::type held_type
;
75 typedef typename
parameter::value_type
<
76 args
, tag::copyable
, void>::type copyable
;
86 using boost::python::bases
;
87 typedef boost::python::class_
<B
, boost::noncopyable
> c1
;
89 typedef boost::python::class_
<D
, std::auto_ptr
<D
>, bases
<B
> > c2
;
90 BOOST_MPL_ASSERT((boost::is_same
<c1::class_type
, B
>));
91 BOOST_MPL_ASSERT((boost::is_same
<c1::base_list
, bases
<> >));
92 BOOST_MPL_ASSERT((boost::is_same
<c1::held_type
, B
>));
94 boost::is_same
<c1::copyable
, boost::noncopyable
>
97 BOOST_MPL_ASSERT((boost::is_same
<c2::class_type
, D
>));
98 BOOST_MPL_ASSERT((boost::is_same
<c2::base_list
, bases
<B
> >));
100 boost::is_same
<c2::held_type
, std::auto_ptr
<D
> >
102 BOOST_MPL_ASSERT((boost::is_same
<c2::copyable
, void>));