fixing stuff
[dyninst.git] / dynutil / h / dyn_detail / boost / detail / sp_typeinfo.hpp
1 #ifndef DYN_DETAIL_BOOST_DETAIL_SP_TYPEINFO_HPP_INCLUDED
2 #define DYN_DETAIL_BOOST_DETAIL_SP_TYPEINFO_HPP_INCLUDED
3
4 // MS compatible compilers support #pragma once
5
6 #if defined(_MSC_VER) && (_MSC_VER >= 1020)
7 # pragma once
8 #endif
9
10 //  detail/sp_typeinfo.hpp
11 //
12 //  Copyright 2007 Peter Dimov
13 //
14 // Distributed under the Boost Software License, Version 1.0.
15 // See accompanying file LICENSE_1_0.txt or copy at
16 // http://www.boost.org/LICENSE_1_0.txt)
17
18 #include <dyn_detail/boost/config.hpp>
19
20 #if defined( DYN_DETAIL_BOOST_NO_TYPEID )
21
22 namespace dyn_detail
23 {
24   
25 namespace boost
26 {
27
28 namespace detail
29 {
30
31 typedef void* sp_typeinfo;
32
33 template<class T> struct sp_typeid_
34 {
35     static char v_;
36 };
37
38 template<class T> char sp_typeid_< T >::v_;
39
40 template<class T> struct sp_typeid_< T const >: sp_typeid_< T >
41 {
42 };
43
44 template<class T> struct sp_typeid_< T volatile >: sp_typeid_< T >
45 {
46 };
47
48 template<class T> struct sp_typeid_< T const volatile >: sp_typeid_< T >
49 {
50 };
51
52 } // namespace detail
53
54 } // namespace boost
55  
56 } // namespace dyn_detail
57
58 #define DYN_DETAIL_BOOST_SP_TYPEID(T) (&boost::detail::sp_typeid_<T>::v_)
59
60 #else
61
62 #include <typeinfo>
63
64 namespace dyn_detail
65 {
66   
67 namespace boost
68 {
69
70 namespace detail
71 {
72
73 #if defined( DYN_DETAIL_BOOST_NO_STD_TYPEINFO )
74
75 typedef ::type_info sp_typeinfo;
76
77 #else
78
79 typedef std::type_info sp_typeinfo;
80
81 #endif
82
83 } // namespace detail
84
85 } // namespace boost
86  
87 } // namespace dyn_detail
88
89
90 #define DYN_DETAIL_BOOST_SP_TYPEID(T) typeid(T)
91
92 #endif
93
94 #endif  // #ifndef DYN_DETAIL_BOOST_DETAIL_SP_TYPEINFO_HPP_INCLUDED