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