]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/python/test/indirect_traits_test.cpp
update sources to v12.2.3
[ceph.git] / ceph / src / boost / libs / python / test / indirect_traits_test.cpp
1 // Copyright David Abrahams 2004. Distributed under the Boost
2 // Software License, Version 1.0. (See accompanying
3 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
4 //#include <stdio.h>
5 #define BOOST_ENABLE_ASSERT_HANDLER
6 #include <boost/assert.hpp>
7 #include <boost/mpl/assert.hpp>
8 #include <boost/python/detail/indirect_traits.hpp>
9 #include <boost/mpl/assert.hpp>
10
11 //#define print(expr) printf("%s ==> %s\n", #expr, expr)
12
13 // not all the compilers can handle an incomplete class type here.
14 struct X {};
15
16 using namespace boost::python::indirect_traits;
17
18 typedef void (X::*pmf)();
19
20 BOOST_MPL_ASSERT((is_reference_to_function<int (&)()>));
21 BOOST_MPL_ASSERT_NOT((is_reference_to_function<int (*)()>));
22 BOOST_MPL_ASSERT_NOT((is_reference_to_function<int&>));
23 BOOST_MPL_ASSERT_NOT((is_reference_to_function<pmf>));
24
25 BOOST_MPL_ASSERT_NOT((is_pointer_to_function<int (&)()>));
26 BOOST_MPL_ASSERT((is_pointer_to_function<int (*)()>));
27 BOOST_MPL_ASSERT_NOT((is_pointer_to_function<int (*&)()>));
28 BOOST_MPL_ASSERT_NOT((is_pointer_to_function<int (*const&)()>));
29 BOOST_MPL_ASSERT_NOT((is_pointer_to_function<pmf>));
30
31 BOOST_MPL_ASSERT_NOT((is_reference_to_function_pointer<int (&)()>));
32 BOOST_MPL_ASSERT_NOT((is_reference_to_function_pointer<int (*)()>));
33 BOOST_MPL_ASSERT_NOT((is_reference_to_function_pointer<int&>));
34 BOOST_MPL_ASSERT((is_reference_to_function_pointer<int (*&)()>));
35 BOOST_MPL_ASSERT((is_reference_to_function_pointer<int (*const&)()>));
36 BOOST_MPL_ASSERT_NOT((is_reference_to_function_pointer<pmf>));
37
38 BOOST_MPL_ASSERT((is_reference_to_pointer<int*&>));
39 BOOST_MPL_ASSERT((is_reference_to_pointer<int* const&>));
40 BOOST_MPL_ASSERT((is_reference_to_pointer<int*volatile&>));
41 BOOST_MPL_ASSERT((is_reference_to_pointer<int*const volatile&>));
42 BOOST_MPL_ASSERT((is_reference_to_pointer<int const*&>));
43 BOOST_MPL_ASSERT((is_reference_to_pointer<int const* const&>));
44 BOOST_MPL_ASSERT((is_reference_to_pointer<int const*volatile&>));
45 BOOST_MPL_ASSERT((is_reference_to_pointer<int const*const volatile&>));
46 BOOST_MPL_ASSERT_NOT((is_reference_to_pointer<pmf>));
47
48 BOOST_MPL_ASSERT_NOT((is_reference_to_pointer<int const volatile>));
49 BOOST_MPL_ASSERT_NOT((is_reference_to_pointer<int>));
50 BOOST_MPL_ASSERT_NOT((is_reference_to_pointer<int*>));
51
52 BOOST_MPL_ASSERT_NOT((is_reference_to_const<int*&>));
53 BOOST_MPL_ASSERT((is_reference_to_const<int* const&>));
54 BOOST_MPL_ASSERT_NOT((is_reference_to_const<int*volatile&>));
55 BOOST_MPL_ASSERT((is_reference_to_const<int*const volatile&>));
56
57 BOOST_MPL_ASSERT_NOT((is_reference_to_const<int const volatile>));
58 BOOST_MPL_ASSERT_NOT((is_reference_to_const<int>));
59 BOOST_MPL_ASSERT_NOT((is_reference_to_const<int*>));
60
61 BOOST_MPL_ASSERT((is_reference_to_non_const<int*&>));
62 BOOST_MPL_ASSERT_NOT((is_reference_to_non_const<int* const&>));
63 BOOST_MPL_ASSERT((is_reference_to_non_const<int*volatile&>));
64 BOOST_MPL_ASSERT_NOT((is_reference_to_non_const<int*const volatile&>));
65
66 BOOST_MPL_ASSERT_NOT((is_reference_to_non_const<int const volatile>));
67 BOOST_MPL_ASSERT_NOT((is_reference_to_non_const<int>));
68 BOOST_MPL_ASSERT_NOT((is_reference_to_non_const<int*>));
69
70 BOOST_MPL_ASSERT_NOT((is_reference_to_volatile<int*&>));
71 BOOST_MPL_ASSERT_NOT((is_reference_to_volatile<int* const&>));
72 BOOST_MPL_ASSERT((is_reference_to_volatile<int*volatile&>));
73 BOOST_MPL_ASSERT((is_reference_to_volatile<int*const volatile&>));
74
75 BOOST_MPL_ASSERT_NOT((is_reference_to_volatile<int const volatile>));
76 BOOST_MPL_ASSERT_NOT((is_reference_to_volatile<int>));
77 BOOST_MPL_ASSERT_NOT((is_reference_to_volatile<int*>));
78
79 namespace tt = boost::python::indirect_traits;
80
81 BOOST_MPL_ASSERT_NOT((tt::is_reference_to_class<int>));
82 BOOST_MPL_ASSERT_NOT((tt::is_reference_to_class<int&>));
83 BOOST_MPL_ASSERT_NOT((tt::is_reference_to_class<int*>));
84
85
86 BOOST_MPL_ASSERT_NOT((tt::is_reference_to_class<pmf>));
87 BOOST_MPL_ASSERT_NOT((tt::is_reference_to_class<pmf const&>));
88
89 BOOST_MPL_ASSERT_NOT((tt::is_reference_to_class<X>));
90
91 BOOST_MPL_ASSERT((tt::is_reference_to_class<X&>));
92 BOOST_MPL_ASSERT((tt::is_reference_to_class<X const&>));
93 BOOST_MPL_ASSERT((tt::is_reference_to_class<X volatile&>));
94 BOOST_MPL_ASSERT((tt::is_reference_to_class<X const volatile&>));
95
96 BOOST_MPL_ASSERT_NOT((is_pointer_to_class<int>));
97 BOOST_MPL_ASSERT_NOT((is_pointer_to_class<int*>));
98 BOOST_MPL_ASSERT_NOT((is_pointer_to_class<int&>));
99
100 BOOST_MPL_ASSERT_NOT((is_pointer_to_class<X>));
101 BOOST_MPL_ASSERT_NOT((is_pointer_to_class<X&>));
102 BOOST_MPL_ASSERT_NOT((is_pointer_to_class<pmf>));
103 BOOST_MPL_ASSERT_NOT((is_pointer_to_class<pmf const>));
104 BOOST_MPL_ASSERT((is_pointer_to_class<X*>));
105 BOOST_MPL_ASSERT((is_pointer_to_class<X const*>));
106 BOOST_MPL_ASSERT((is_pointer_to_class<X volatile*>));
107 BOOST_MPL_ASSERT((is_pointer_to_class<X const volatile*>));
108
109 BOOST_MPL_ASSERT((tt::is_reference_to_member_function_pointer<pmf&>));
110 BOOST_MPL_ASSERT((tt::is_reference_to_member_function_pointer<pmf const&>));
111 BOOST_MPL_ASSERT((tt::is_reference_to_member_function_pointer<pmf volatile&>));
112 BOOST_MPL_ASSERT((tt::is_reference_to_member_function_pointer<pmf const volatile&>));
113 BOOST_MPL_ASSERT_NOT((tt::is_reference_to_member_function_pointer<pmf[2]>));
114 BOOST_MPL_ASSERT_NOT((tt::is_reference_to_member_function_pointer<pmf(&)[2]>));
115 BOOST_MPL_ASSERT_NOT((tt::is_reference_to_member_function_pointer<pmf>));
116