blob: b0649e0d33160f616665b9940dcf3121792de52d [file] [log] [blame]
From b77c0af6af8bc4797defc3627878acc3cf7a6f39 Mon Sep 17 00:00:00 2001
From: Antony Polukhin <antoshkka@gmail.com>
Date: Thu, 20 Feb 2014 17:57:24 +0400
Subject: [PATCH] detail/sp_typeinfo.hpp now uses TypeIndex
---
include/boost/detail/sp_typeinfo.hpp | 123 +++--------------------------------
1 file changed, 8 insertions(+), 115 deletions(-)
diff --git a/include/boost/detail/sp_typeinfo.hpp b/include/boost/detail/sp_typeinfo.hpp
index 43fae78..fbdf86d 100644
--- a/include/boost/detail/sp_typeinfo.hpp
+++ b/include/boost/detail/sp_typeinfo.hpp
@@ -10,126 +10,19 @@
// detail/sp_typeinfo.hpp
//
// Copyright 2007 Peter Dimov
+// Copyright 2014 Antony Polukhin
//
// Distributed under the Boost Software License, Version 1.0.
// See accompanying file LICENSE_1_0.txt or copy at
// http://www.boost.org/LICENSE_1_0.txt)
-#include <boost/config.hpp>
+#include <boost/type_index.hpp>
+namespace boost { namespace detail {
+
+typedef boost::typeind::type_info sp_typeinfo;
+
+}} // namespace boost::detail
-#if defined( BOOST_NO_TYPEID )
-
-#include <boost/current_function.hpp>
-#include <functional>
-
-namespace boost
-{
-
-namespace detail
-{
-
-class sp_typeinfo
-{
-private:
-
- sp_typeinfo( sp_typeinfo const& );
- sp_typeinfo& operator=( sp_typeinfo const& );
-
- char const * name_;
-
-public:
-
- explicit sp_typeinfo( char const * name ): name_( name )
- {
- }
-
- bool operator==( sp_typeinfo const& rhs ) const
- {
- return this == &rhs;
- }
-
- bool operator!=( sp_typeinfo const& rhs ) const
- {
- return this != &rhs;
- }
-
- bool before( sp_typeinfo const& rhs ) const
- {
- return std::less< sp_typeinfo const* >()( this, &rhs );
- }
-
- char const* name() const
- {
- return name_;
- }
-};
-
-template<class T> struct sp_typeid_
-{
- static sp_typeinfo ti_;
-
- static char const * name()
- {
- return BOOST_CURRENT_FUNCTION;
- }
-};
-
-#if defined(__SUNPRO_CC)
-// see #4199, the Sun Studio compiler gets confused about static initialization
-// constructor arguments. But an assignment works just fine.
-template<class T> sp_typeinfo sp_typeid_< T >::ti_ = sp_typeid_< T >::name();
-#else
-template<class T> sp_typeinfo sp_typeid_< T >::ti_(sp_typeid_< T >::name());
-#endif
-
-template<class T> struct sp_typeid_< T & >: sp_typeid_< T >
-{
-};
-
-template<class T> struct sp_typeid_< T const >: sp_typeid_< T >
-{
-};
-
-template<class T> struct sp_typeid_< T volatile >: sp_typeid_< T >
-{
-};
-
-template<class T> struct sp_typeid_< T const volatile >: sp_typeid_< T >
-{
-};
-
-} // namespace detail
-
-} // namespace boost
-
-#define BOOST_SP_TYPEID(T) (boost::detail::sp_typeid_<T>::ti_)
-
-#else
-
-#include <typeinfo>
-
-namespace boost
-{
-
-namespace detail
-{
-
-#if defined( BOOST_NO_STD_TYPEINFO )
-
-typedef ::type_info sp_typeinfo;
-
-#else
-
-typedef std::type_info sp_typeinfo;
-
-#endif
-
-} // namespace detail
-
-} // namespace boost
-
-#define BOOST_SP_TYPEID(T) typeid(T)
-
-#endif
+#define BOOST_SP_TYPEID(T) (boost::typeind::type_id<T>().type_info())
#endif // #ifndef BOOST_DETAIL_SP_TYPEINFO_HPP_INCLUDED
--
1.8.5.3