rippled
Loading...
Searching...
No Matches
type_name.h
1#ifndef BEAST_TYPE_NAME_H_INCLUDED
2#define BEAST_TYPE_NAME_H_INCLUDED
3
4#include <cstdlib>
5#include <string>
6#include <type_traits>
7#include <typeinfo>
8
9#ifndef _MSC_VER
10#include <cxxabi.h>
11#endif
12
13namespace beast {
14
15template <typename T>
18{
19 using TR = typename std::remove_reference<T>::type;
20
21 std::string name = typeid(TR).name();
22
23#ifndef _MSC_VER
24 if (auto s = abi::__cxa_demangle(name.c_str(), nullptr, nullptr, nullptr))
25 {
26 name = s;
27 std::free(s);
28 }
29#endif
30
32 name += " const";
34 name += " volatile";
36 name += "&";
38 name += "&&";
39
40 return name;
41}
42
43} // namespace beast
44
45#endif
T c_str(T... args)
T free(T... args)
std::string type_name()
Definition type_name.h:17