@@ -19,7 +19,9 @@ namespace boost { namespace python {
1919// for this compiler at least, cross-shared-library type_info
2020// comparisons don't work, so use typeid(x).name() instead. It's not
2121// yet clear what the best default strategy is.
22- # if defined(__GNUC__) && __GNUC__ >= 3 || defined(_AIX)
22+ # if (defined(__GNUC__) && __GNUC__ >= 3) \
23+ || defined (_AIX) \
24+ || ( defined (__sgi) && defined (__host_mips))
2325# define BOOST_PYTHON_TYPE_ID_NAME
2426# endif
2527
@@ -28,7 +30,7 @@ namespace boost { namespace python {
2830// which works across shared libraries.
2931struct type_info : private totally_ordered <type_info>
3032{
31- type_info (std::type_info const & = typeid (void ));
33+ inline type_info (std::type_info const & = typeid (void ));
3234
3335 inline bool operator <(type_info const & rhs) const ;
3436 inline bool operator ==(type_info const & rhs) const ;
@@ -59,8 +61,8 @@ inline type_info type_id(boost::type<T>* = 0)
5961 );
6062}
6163
62- # if defined(_AIX) && defined( __EDG_VERSION__) && __EDG_VERSION__ <= 245
63- // KCC on this platform seems to mistakenly distinguish "int" from
64+ # if defined(__EDG_VERSION__) && __EDG_VERSION__ < 245
65+ // Older EDG-based compilers seems to mistakenly distinguish "int" from
6466// "signed int", etc., but only in typeid() expressions. However
6567// though int == signed int, the "signed" decoration is propagated
6668// down into template instantiations. Explicit specialization stops
@@ -76,6 +78,9 @@ inline type_info type_id<T>(boost::type<T>*) \
7678BOOST_PYTHON_SIGNED_INTEGRAL_TYPE_ID (short )
7779BOOST_PYTHON_SIGNED_INTEGRAL_TYPE_ID (int )
7880BOOST_PYTHON_SIGNED_INTEGRAL_TYPE_ID (long )
81+ # ifdef BOOST_HAS_LONG_LONG
82+ BOOST_PYTHON_SIGNED_INTEGRAL_TYPE_ID (long long )
83+ # endif
7984# undef BOOST_PYTHON_SIGNED_INTEGRAL_TYPE_ID
8085# endif
8186
0 commit comments