1 #include <cppunit/Portability.h>
2 #include <cppunit/extensions/TypeInfoHelper.h>
8 #if CPPUNIT_HAVE_GCC_ABI_DEMANGLE
18 TypeInfoHelper::getClassName( const std::type_info &info )
20 #if defined(CPPUNIT_HAVE_GCC_ABI_DEMANGLE) && CPPUNIT_HAVE_GCC_ABI_DEMANGLE
25 c_name = abi::__cxa_demangle( info.name(), 0, 0, &status );
27 std::string name( c_name );
30 #else // CPPUNIT_HAVE_GCC_ABI_DEMANGLE
32 static std::string classPrefix( "class " );
33 std::string name( info.name() );
35 // Work around gcc 3.0 bug: strip number before type name.
36 unsigned int firstNotDigitIndex = 0;
37 while ( firstNotDigitIndex < name.length() &&
38 name[firstNotDigitIndex] >= '0' &&
39 name[firstNotDigitIndex] <= '9' )
41 name = name.substr( firstNotDigitIndex );
43 if ( name.substr( 0, classPrefix.length() ) == classPrefix )
44 return name.substr( classPrefix.length() );
46 #endif // CPPUNIT_HAVE_GCC_ABI_DEMANGLE
54 #endif // CPPUNIT_HAVE_RTTI