ClickHouse/base/base/demangle.h
Nikita Mikhaylov 7ff447de68 Modify the code for build with new libcxx
(cherry picked from commit c896f0bf677bcc948d988cf83b2108e9f7cd761d)
2024-07-09 20:16:43 +00:00

34 lines
754 B
C++

#pragma once
#include <cstdlib>
#include <memory>
#include <string>
/** Demangles C++ symbol name.
* When demangling fails, returns the original name and sets status to non-zero.
* TODO: Write msvc version (now returns the same string)
*/
std::string demangle(const char * name, int & status);
inline std::string demangle(const char * name)
{
int status = 0;
return demangle(name, status);
}
// abi::__cxa_demangle returns a C string of known size that should be deleted
// with free().
struct FreeingDeleter
{
template <typename PointerType>
void operator() (PointerType ptr)
{
std::free(ptr);
}
};
using DemangleResult = std::unique_ptr<char, FreeingDeleter>;
DemangleResult tryDemangle(const char * name);