11USERVER_NAMESPACE_BEGIN
22constexpr std::string_view GetTypeAlias() {
23 if constexpr (std::is_same_v<T, std::string>) {
25 }
else if constexpr (std::is_same_v<T, std::string_view>) {
26 return "std::string_view";
27 }
else if constexpr (std::is_same_v<T, std::chrono::nanoseconds>) {
28 return "std::chrono::nanoseconds";
29 }
else if constexpr (std::is_same_v<T, std::chrono::microseconds>) {
30 return "std::chrono::microseconds";
31 }
else if constexpr (std::is_same_v<T, std::chrono::milliseconds>) {
32 return "std::chrono::milliseconds";
33 }
else if constexpr (std::is_same_v<T, std::chrono::seconds>) {
34 return "std::chrono::seconds";
35 }
else if constexpr (std::is_same_v<T, std::chrono::minutes>) {
36 return "std::chrono::minutes";
37 }
else if constexpr (std::is_same_v<T, std::chrono::hours>) {
38 return "std::chrono::hours";
39 }
else if constexpr (std::is_same_v<T, std::chrono::steady_clock::time_point>) {
40 return "std::chrono::steady_clock::time_point";
41 }
else if constexpr (std::is_same_v<T, std::chrono::system_clock::time_point>) {
42 return "std::chrono::system_clock::time_point";
50#if defined(__GNUC__
) && !defined(DOXYGEN)
55constexpr std::string_view GetFullTypeName() {
56 constexpr auto alias = GetTypeAlias<T>();
57 if constexpr (!alias.empty()) {
60 constexpr std::string_view name =
__PRETTY_FUNCTION__;
61 constexpr auto begin_pos = name.find(
"T = ");
62 constexpr auto end_pos = name.find_first_of(
";]", begin_pos);
63 return name.substr(begin_pos + 4, end_pos - begin_pos - 4);
70constexpr std::string_view GetTypeName() {
71 return detail::GetFullTypeName<
typename std::decay_t<T>>();