]> git.proxmox.com Git - ceph.git/blame - 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
CommitLineData
7c673cae
FG
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>
b32b8144 7#include <boost/config.hpp>
7c673cae
FG
8
9using namespace boost::parameter;
10
11namespace boost { namespace python {
12
13BOOST_PARAMETER_TEMPLATE_KEYWORD(class_type)
14BOOST_PARAMETER_TEMPLATE_KEYWORD(base_list)
15BOOST_PARAMETER_TEMPLATE_KEYWORD(held_type)
16BOOST_PARAMETER_TEMPLATE_KEYWORD(copyable)
17
18template <class B = int>
19struct bases
20{};
21
22}}
23namespace boost { namespace python {
24
25using boost::mpl::_;
26
27typedef 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
36namespace boost { namespace python {
37
38template <
39 class A0
40 , class A1 = parameter::void_
41 , class A2 = parameter::void_
42 , class A3 = parameter::void_
43>
44struct 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
68using boost::python::class_type;
69using boost::python::copyable;
70using boost::python::held_type;
71using boost::python::base_list;
72using boost::python::bases;
73
74struct B {};
75struct D {};
76typedef boost::python::class_<
77 class_type<B>, copyable<boost::noncopyable>
78> c1;
79
80typedef boost::python::class_<
b32b8144
FG
81
82#if defined(BOOST_NO_CXX11_SMART_PTR)
83
7c673cae 84 D, held_type<std::auto_ptr<D> >, base_list<bases<B> >
b32b8144
FG
85
86#else
87
88 D, held_type<std::unique_ptr<D> >, base_list<bases<B> >
89
90#endif
91
7c673cae
FG
92> c2;
93
94BOOST_MPL_ASSERT((boost::is_same<c1::class_type, B>));
95BOOST_MPL_ASSERT((boost::is_same<c1::base_list, bases<> >));
96BOOST_MPL_ASSERT((boost::is_same<c1::held_type, B>));
97BOOST_MPL_ASSERT((
98 boost::is_same<c1::copyable, boost::noncopyable>
99));
100
101BOOST_MPL_ASSERT((boost::is_same<c2::class_type, D>));
102BOOST_MPL_ASSERT((boost::is_same<c2::base_list, bases<B> >));
b32b8144
FG
103
104#if defined(BOOST_NO_CXX11_SMART_PTR)
105
7c673cae
FG
106BOOST_MPL_ASSERT((
107 boost::is_same<c2::held_type, std::auto_ptr<D> >
108));
b32b8144
FG
109
110#else
111
112BOOST_MPL_ASSERT((
113 boost::is_same<c2::held_type, std::unique_ptr<D> >
114));
115
116#endif
117
7c673cae 118BOOST_MPL_ASSERT((boost::is_same<c2::copyable, void>));