1//Copyright (c) 2006-2010 Emil Dotchevski and Reverge Studios, Inc.
2
3//Distributed under the Boost Software License, Version 1.0. (See accompanying
4//file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
5
6#ifndef UUID_C3E1741C754311DDB2834CCA55D89593
7#define UUID_C3E1741C754311DDB2834CCA55D89593
8#if (__GNUC__*100+__GNUC_MINOR__>301) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
9#pragma GCC system_header
10#endif
11#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
12#pragma warning(push,1)
13#endif
14
15#include <boost/core/typeinfo.hpp>
16#include <boost/core/demangle.hpp>
17#include <boost/current_function.hpp>
18#include <boost/config.hpp>
19#include <string>
20
21namespace
22boost
23 {
24 template <class T>
25 inline
26 std::string
27 tag_type_name()
28 {
29#ifdef BOOST_NO_TYPEID
30 return BOOST_CURRENT_FUNCTION;
31#else
32 return core::demangle(name: typeid(T*).name());
33#endif
34 }
35
36 template <class T>
37 inline
38 std::string
39 type_name()
40 {
41#ifdef BOOST_NO_TYPEID
42 return BOOST_CURRENT_FUNCTION;
43#else
44 return core::demangle(name: typeid(T).name());
45#endif
46 }
47
48 namespace
49 exception_detail
50 {
51 struct
52 type_info_
53 {
54 core::typeinfo const * type_;
55
56 explicit
57 type_info_( core::typeinfo const & type ):
58 type_(&type)
59 {
60 }
61
62 friend
63 bool
64 operator<( type_info_ const & a, type_info_ const & b )
65 {
66 return 0!=(a.type_->before(arg: *b.type_));
67 }
68 };
69 }
70 }
71
72#define BOOST_EXCEPTION_STATIC_TYPEID(T) ::boost::exception_detail::type_info_(BOOST_CORE_TYPEID(T))
73
74#ifndef BOOST_NO_RTTI
75#define BOOST_EXCEPTION_DYNAMIC_TYPEID(x) ::boost::exception_detail::type_info_(typeid(x))
76#endif
77
78#if defined(_MSC_VER) && !defined(BOOST_EXCEPTION_ENABLE_WARNINGS)
79#pragma warning(pop)
80#endif
81#endif
82

source code of boost/boost/exception/detail/type_info.hpp