diff --git a/boost/type_index/type_index.hpp b/boost/type_index/type_index.hpp index b44361e..7ce724b 100644 --- a/boost/type_index/type_index.hpp +++ b/boost/type_index/type_index.hpp @@ -25,7 +25,8 @@ #include #include -#if !defined(BOOST_NO_RTTI) && !defined(BOOST_TYPE_INDEX_FORCE_NORTTI_COMPATIBILITY) +// MSVC is capable of calling typeid(T) even when RTTI is off +#if (!defined(BOOST_NO_RTTI) && !defined(BOOST_TYPE_INDEX_FORCE_NORTTI_COMPATIBILITY)) || defined(BOOST_MSVC) #if !defined(BOOST_NO_IOSTREAM) #if !defined(BOOST_NO_IOSFWD) @@ -205,7 +206,7 @@ inline std::size_t hash_value(type_index const& v) BOOST_NOEXCEPT { } // namespace boost -#else // !defined(BOOST_NO_RTTI) && !defined(BOOST_TYPE_INDEX_FORCE_NORTTI_COMPATIBILITY) +#else // (!defined(BOOST_NO_RTTI) && !defined(BOOST_TYPE_INDEX_FORCE_NORTTI_COMPATIBILITY)) || defined(BOOST_MSVC) #include namespace boost { @@ -214,7 +215,7 @@ typedef template_index type_index; } -#endif // !defined(BOOST_NO_RTTI) && !defined(BOOST_TYPE_INDEX_FORCE_NORTTI_COMPATIBILITY) +#endif // (!defined(BOOST_NO_RTTI) && !defined(BOOST_TYPE_INDEX_FORCE_NORTTI_COMPATIBILITY)) || defined(BOOST_MSVC) #endif // BOOST_TYPE_INDEX_TYPE_INDEX_HPP diff --git a/boost/type_index/type_info.hpp b/boost/type_index/type_info.hpp index f72ffcf..aaedaf8 100644 --- a/boost/type_index/type_info.hpp +++ b/boost/type_index/type_info.hpp @@ -22,11 +22,13 @@ /// /// boost::type_info class is used in situations when RTTI is enabled. /// When RTTI is disabled or BOOST_TYPE_INDEX_FORCE_NORTTI_COMPATIBILITY macro is defined boost::template_info -/// is used instead of it. +/// is usually used instead of it. #include -#if !defined(BOOST_NO_RTTI) && !defined(BOOST_TYPE_INDEX_FORCE_NORTTI_COMPATIBILITY) + +// MSVC is capable of calling typeid(T) even when RTTI is off +#if (!defined(BOOST_NO_RTTI) && !defined(BOOST_TYPE_INDEX_FORCE_NORTTI_COMPATIBILITY)) || defined(BOOST_MSVC) #include #include @@ -136,6 +138,10 @@ public: /// This method available only with RTTI enabled. template static const type_info& construct_rtti_only(T& rtti_val) BOOST_NOEXCEPT { +#ifdef BOOST_NO_RTTI + BOOST_STATIC_ASSERT_MSG(sizeof(T) && false, + "boost::type_id_rtti_only(T&) and boost::type_info::construct_rtti_only(T&) require RTTI"); +#endif return static_cast(typeid(rtti_val)); } @@ -143,6 +149,10 @@ public: /// This method available only with RTTI enabled. template static const type_info& construct_rtti_only(T* rtti_val) { +#ifdef BOOST_NO_RTTI + BOOST_STATIC_ASSERT_MSG(sizeof(T) && false, + "boost::type_id_rtti_only(T*) and boost::type_info::construct_rtti_only(T*) require RTTI"); +#endif return static_cast(typeid(rtti_val)); } @@ -334,7 +344,7 @@ inline const type_info& type_id_rtti_only(T* rtti_val) { } // namespace boost -#endif // !defined(BOOST_NO_RTTI) && !defined(BOOST_TYPE_INDEX_FORCE_NORTTI_COMPATIBILITY) +#endif // (!defined(BOOST_NO_RTTI) && !defined(BOOST_TYPE_INDEX_FORCE_NORTTI_COMPATIBILITY)) || defined (BOOST_MSVC) #if defined(BOOST_TYPE_INDEX_DOXYGEN_INVOKED) /// \def BOOST_TYPE_INDEX_FORCE_NORTTI_COMPATIBILITY diff --git a/libs/type_index/doc/type_index.qbk b/libs/type_index/doc/type_index.qbk index 3b4a614..519e95f 100644 --- a/libs/type_index/doc/type_index.qbk +++ b/libs/type_index/doc/type_index.qbk @@ -1,6 +1,6 @@ [library Boost.TypeIndex [quickbook 1.6] - [version 2.0] + [version 2.1] [copyright 2012-2013 Antony Polukhin] [category Language Features Emulation] [license