123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- #ifndef CEREAL_DETAILS_UTIL_HPP_
- #define CEREAL_DETAILS_UTIL_HPP_
- #include <typeinfo>
- #include <string>
- #ifdef _MSC_VER
- namespace cereal
- {
- namespace util
- {
-
-
- inline std::string demangle( std::string const & name )
- { return name; }
-
-
- template <class T> inline
- std::string demangledName()
- { return typeid( T ).name(); }
- }
- }
- #else
- #include <cxxabi.h>
- #include <cstdlib>
- namespace cereal
- {
- namespace util
- {
-
-
- inline std::string demangle(std::string mangledName)
- {
- int status = 0;
- char *demangledName = nullptr;
- std::size_t len;
- demangledName = abi::__cxa_demangle(mangledName.c_str(), 0, &len, &status);
- std::string retName(demangledName);
- free(demangledName);
- return retName;
- }
-
-
- template<class T> inline
- std::string demangledName()
- { return demangle(typeid(T).name()); }
- }
- }
- #endif
- #endif
|