]> git.proxmox.com Git - ceph.git/blame - 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
CommitLineData
7c673cae
FG
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
11namespace boost { namespace python { namespace converter {
12
13namespace 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.
58template <class T>
59type_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