25#include "../../char8_t_remediation.hpp"
26#include "parse_qualified_function_name.hpp"
27#include "parse_raw_identifier_name.hpp"
36#define ES_UNIFORM_FUNCSIG __FUNCSIG__
37#elif defined(__GNUC__) || defined(__clang__)
38#define ES_UNIFORM_FUNCSIG __PRETTY_FUNCTION__
40#error "Unsupported compiler."
43namespace essence::meta::detail {
50 template <
typename T, identifier_param Param = identifier_param{}>
51 consteval auto get_literal_string() noexcept {
52 return parse_raw_identifier_name(U8(
"essence::meta::detail::get_literal_string<"), ES_UNIFORM_FUNCSIG,
54 .ensure_correctness = Param.ensure_correctness,
55 .preview_first_character = Param.preview_first_character,
66 template <
auto Value,
typename T, identifier_param Param = identifier_param{}>
67 consteval auto get_literal_string() noexcept {
68 return parse_raw_identifier_name(U8(
"essence::meta::detail::get_literal_string<"), ES_UNIFORM_FUNCSIG,
71 .ensure_correctness = Param.ensure_correctness,
72 .preview_first_character = Param.preview_first_character,
82 template <
typename T, identifier_param Param = identifier_param{}>
83 consteval auto get_short_literal_string() noexcept {
84 return parse_raw_identifier_name(U8(
"essence::meta::detail::get_short_literal_string<"), ES_UNIFORM_FUNCSIG,
87 .ensure_correctness = Param.ensure_correctness,
88 .preview_first_character = Param.preview_first_character,
99 template <
auto Value,
typename T, identifier_param Param = identifier_param{}>
100 consteval auto get_short_literal_string() noexcept {
101 return parse_raw_identifier_name(U8(
"essence::meta::detail::get_short_literal_string<"), ES_UNIFORM_FUNCSIG,
105 .ensure_correctness = Param.ensure_correctness,
106 .preview_first_character = Param.preview_first_character,
116 template <
auto Value, identifier_param Param = identifier_param{}>
117 requires(std::is_pointer_v<
decltype(Value)> && std::is_function_v<std::remove_pointer_t<
decltype(Value)>>)
118 consteval auto get_function_name()
noexcept {
119 return parse_qualified_function_name(
120 parse_raw_identifier_name(U8(
"essence::meta::detail::get_function_name<"), ES_UNIFORM_FUNCSIG,
123 .ensure_correctness = Param.ensure_correctness,
124 .preview_first_character = Param.preview_first_character,
134 template <
auto Value, identifier_param Param = identifier_param{}>
135 requires(std::is_pointer_v<
decltype(Value)> && std::is_function_v<std::remove_pointer_t<
decltype(Value)>>)
136 consteval auto get_short_function_name()
noexcept {
137 return get_short_identifier_name(get_function_name<Value, Param>());