]>
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>
6 #include <boost/config.hpp>
8 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
)
19 namespace boost
{ namespace python
{
21 namespace detail
{ struct bases_base
{}; }
23 template <class A0
= void, class A1
= void, class A2
= void >
24 struct bases
: detail::bases_base
30 #include <boost/type_traits/is_class.hpp>
31 namespace boost
{ namespace python
{
32 typedef parameter::parameters
<
33 required
<tag::class_type
, is_class
<_
> >
35 , parameter::optional
<
36 deduced
<tag::base_list
>
37 , is_base_and_derived
<detail::bases_base
,_
>
40 , parameter::optional
<
41 deduced
<tag::held_type
>
44 is_base_and_derived
<detail::bases_base
,_
>
45 , is_same
<noncopyable
,_
>
50 , parameter::optional
<deduced
<tag::copyable
>, is_same
<noncopyable
,_
> >
55 , class A1
= parameter::void_
56 , class A2
= parameter::void_
57 , class A3
= parameter::void_
61 // Create ArgumentPack
63 class_signature::bind
<A0
,A1
,A2
,A3
>::type
66 // Extract first logical parameter.
67 typedef typename
parameter::value_type
<
68 args
, tag::class_type
>::type class_type
;
70 typedef typename
parameter::value_type
<
71 args
, tag::base_list
, bases
<> >::type base_list
;
73 typedef typename
parameter::value_type
<
74 args
, tag::held_type
, class_type
>::type held_type
;
76 typedef typename
parameter::value_type
<
77 args
, tag::copyable
, void>::type copyable
;
87 using boost::python::bases
;
88 typedef boost::python::class_
<B
, boost::noncopyable
> c1
;
90 #if defined(BOOST_NO_CXX11_SMART_PTR)
92 typedef boost::python::class_
<D
, std::auto_ptr
<D
>, bases
<B
> > c2
;
96 typedef boost::python::class_
<D
, std::unique_ptr
<D
>, bases
<B
> > c2
;
100 BOOST_MPL_ASSERT((boost::is_same
<c1::class_type
, B
>));
101 BOOST_MPL_ASSERT((boost::is_same
<c1::base_list
, bases
<> >));
102 BOOST_MPL_ASSERT((boost::is_same
<c1::held_type
, B
>));
104 boost::is_same
<c1::copyable
, boost::noncopyable
>
107 BOOST_MPL_ASSERT((boost::is_same
<c2::class_type
, D
>));
108 BOOST_MPL_ASSERT((boost::is_same
<c2::base_list
, bases
<B
> >));
110 #if defined(BOOST_NO_CXX11_SMART_PTR)
113 boost::is_same
<c2::held_type
, std::auto_ptr
<D
> >
119 boost::is_same
<c2::held_type
, std::unique_ptr
<D
> >
124 BOOST_MPL_ASSERT((boost::is_same
<c2::copyable
, void>));