]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
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> | |
7c673cae FG |
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 |