]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/parameter/test/literate/exercising-the-code-so-far0.cpp
update sources to v12.2.3
[ceph.git] / ceph / src / boost / libs / parameter / test / literate / exercising-the-code-so-far0.cpp
1
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>
6 #include <memory>
7 #include <boost/config.hpp>
8
9 using namespace boost::parameter;
10
11 namespace boost { namespace python {
12
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)
17
18 template <class B = int>
19 struct bases
20 {};
21
22 }}
23 namespace boost { namespace python {
24
25 using boost::mpl::_;
26
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>
32 > class_signature;
33
34 }}
35
36 namespace boost { namespace python {
37
38 template <
39 class A0
40 , class A1 = parameter::void_
41 , class A2 = parameter::void_
42 , class A3 = parameter::void_
43 >
44 struct class_
45 {
46 // Create ArgumentPack
47 typedef typename
48 class_signature::bind<A0,A1,A2,A3>::type
49 args;
50
51 // Extract first logical parameter.
52 typedef typename parameter::value_type<
53 args, tag::class_type>::type class_type;
54
55 typedef typename parameter::value_type<
56 args, tag::base_list, bases<> >::type base_list;
57
58 typedef typename parameter::value_type<
59 args, tag::held_type, class_type>::type held_type;
60
61 typedef typename parameter::value_type<
62 args, tag::copyable, void>::type copyable;
63 };
64
65 }}
66
67
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;
73
74 struct B {};
75 struct D {};
76 typedef boost::python::class_<
77 class_type<B>, copyable<boost::noncopyable>
78 > c1;
79
80 typedef boost::python::class_<
81
82 #if defined(BOOST_NO_CXX11_SMART_PTR)
83
84 D, held_type<std::auto_ptr<D> >, base_list<bases<B> >
85
86 #else
87
88 D, held_type<std::unique_ptr<D> >, base_list<bases<B> >
89
90 #endif
91
92 > c2;
93
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>));
97 BOOST_MPL_ASSERT((
98 boost::is_same<c1::copyable, boost::noncopyable>
99 ));
100
101 BOOST_MPL_ASSERT((boost::is_same<c2::class_type, D>));
102 BOOST_MPL_ASSERT((boost::is_same<c2::base_list, bases<B> >));
103
104 #if defined(BOOST_NO_CXX11_SMART_PTR)
105
106 BOOST_MPL_ASSERT((
107 boost::is_same<c2::held_type, std::auto_ptr<D> >
108 ));
109
110 #else
111
112 BOOST_MPL_ASSERT((
113 boost::is_same<c2::held_type, std::unique_ptr<D> >
114 ));
115
116 #endif
117
118 BOOST_MPL_ASSERT((boost::is_same<c2::copyable, void>));