diff --git a/patched/detail/README.md b/patched/detail/README.md new file mode 100644 index 0000000..a5e2b55 --- /dev/null +++ b/patched/detail/README.md @@ -0,0 +1 @@ +To be honest sp_typeinfo.hpp won't be required with Boost.TypeIndex, because Boost.TypeIndex is more functional then sp_typeinfo and requires much less macro for usage. sp_typeinfo.patch contains a temporary solution for easy migration. Later sp_typeinfo may be removed and BOOST_SP_TYPEID(T) macro deprecated. diff --git a/patched/detail/sp_typeinfo.patch b/patched/detail/sp_typeinfo.patch new file mode 100644 index 0000000..2acb7b1 --- /dev/null +++ b/patched/detail/sp_typeinfo.patch @@ -0,0 +1,132 @@ +Index: . +=================================================================== +--- . (revision 86532) ++++ . (working copy) +@@ -15,121 +15,15 @@ + // See accompanying file LICENSE_1_0.txt or copy at + // http://www.boost.org/LICENSE_1_0.txt) + +-#include ++#include + +-#if defined( BOOST_NO_TYPEID ) ++namespace boost { namespace detail { + +-#include +-#include ++typedef boost::type_info sp_typeinfo; + +-namespace boost +-{ ++}} // namespace boost::detail + +-namespace detail +-{ ++#define BOOST_SP_TYPEID(T) (boost::type_id()) + +-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 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 sp_typeinfo sp_typeid_< T >::ti_ = sp_typeid_< T >::name(); +-#else +-template sp_typeinfo sp_typeid_< T >::ti_(sp_typeid_< T >::name()); +-#endif +- +-template struct sp_typeid_< T & >: sp_typeid_< T > +-{ +-}; +- +-template struct sp_typeid_< T const >: sp_typeid_< T > +-{ +-}; +- +-template struct sp_typeid_< T volatile >: sp_typeid_< T > +-{ +-}; +- +-template struct sp_typeid_< T const volatile >: sp_typeid_< T > +-{ +-}; +- +-} // namespace detail +- +-} // namespace boost +- +-#define BOOST_SP_TYPEID(T) (boost::detail::sp_typeid_::ti_) +- +-#else +- +-#include +- +-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 +- + #endif // #ifndef BOOST_DETAIL_SP_TYPEINFO_HPP_INCLUDED ++