]> git.proxmox.com Git - ceph.git/blob - ceph/src/boost/libs/python/include/boost/python/converter/pointer_type_id.hpp
bump version to 12.2.2-pve1
[ceph.git] / ceph / src / boost / libs / python / include / boost / python / converter / pointer_type_id.hpp
1 // Copyright David Abrahams 2002.
2 // Distributed under the Boost Software License, Version 1.0. (See
3 // accompanying file LICENSE_1_0.txt or copy at
4 // http://www.boost.org/LICENSE_1_0.txt)
5 #ifndef POINTER_TYPE_ID_DWA2002222_HPP
6 # define POINTER_TYPE_ID_DWA2002222_HPP
7
8 # include <boost/python/type_id.hpp>
9 # include <boost/type_traits/composite_traits.hpp>
10
11 namespace boost { namespace python { namespace converter {
12
13 namespace detail
14 {
15 template <bool is_ref = false>
16 struct pointer_typeid_select
17 {
18 template <class T>
19 static inline type_info execute(T*(*)() = 0)
20 {
21 return type_id<T>();
22 }
23 };
24
25 template <>
26 struct pointer_typeid_select<true>
27 {
28 template <class T>
29 static inline type_info execute(T* const volatile&(*)() = 0)
30 {
31 return type_id<T>();
32 }
33
34 template <class T>
35 static inline type_info execute(T*volatile&(*)() = 0)
36 {
37 return type_id<T>();
38 }
39
40 template <class T>
41 static inline type_info execute(T*const&(*)() = 0)
42 {
43 return type_id<T>();
44 }
45
46 template <class T>
47 static inline type_info execute(T*&(*)() = 0)
48 {
49 return type_id<T>();
50 }
51 };
52 }
53
54 // Usage: pointer_type_id<T>()
55 //
56 // Returns a type_info associated with the type pointed
57 // to by T, which may be a pointer or a reference to a pointer.
58 template <class T>
59 type_info pointer_type_id(T(*)() = 0)
60 {
61 return detail::pointer_typeid_select<
62 is_reference<T>::value
63 >::execute((T(*)())0);
64 }
65
66 }}} // namespace boost::python::converter
67
68 #endif // POINTER_TYPE_ID_DWA2002222_HPP