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