update NameofEnum
This commit is contained in:
parent
819c58c8eb
commit
ff6553a754
1 changed files with 8 additions and 9 deletions
|
@ -459,18 +459,17 @@ constexpr cstring Nameof(const char* name, std::size_t size, bool with_suffix =
|
|||
}
|
||||
|
||||
template <typename T,
|
||||
typename = typename std::enable_if<std::is_enum<T>::value>::type>
|
||||
NAMEOF_CONSTEXPR cstring NameofEnum(T value) {
|
||||
typename D = typename std::decay<T>::type,
|
||||
typename U = typename std::underlying_type<D>::type,
|
||||
typename S = typename std::is_signed<U>::type,
|
||||
typename = typename std::enable_if<std::is_enum<D>::value>::type>
|
||||
NAMEOF_CONSTEXPR cstring NameofEnum(D value) {
|
||||
#if defined(__clang__) || defined(_MSC_VER)
|
||||
return detail::NameofPretty(
|
||||
std::is_unsigned<typename std::underlying_type<T>::type>::value
|
||||
? detail::NameofEnumImpl<T, 0>{}(static_cast<int>(value))
|
||||
: detail::NameofEnumImpl<T, -NAMEOF_ENUM_MAX_SEARCH_DEPTH>{}(static_cast<int>(value)),
|
||||
detail::NameofEnumImpl<D, S::value ? -NAMEOF_ENUM_MAX_SEARCH_DEPTH : 0>{}(static_cast<int>(value)),
|
||||
false);
|
||||
#elif defined(__GNUC__)
|
||||
return std::is_unsigned<typename std::underlying_type<T>::type>::value
|
||||
? detail::NameofEnumImpl<T, 0>{}(static_cast<int>(value))
|
||||
: detail::NameofEnumImpl<T, -NAMEOF_ENUM_MAX_SEARCH_DEPTH>{}(static_cast<int>(value));
|
||||
return detail::NameofEnumImpl<D, S::value ? -NAMEOF_ENUM_MAX_SEARCH_DEPTH : 0>{}(static_cast<int>(value));
|
||||
#else
|
||||
return {};
|
||||
#endif
|
||||
|
@ -497,7 +496,7 @@ constexpr cstring NameofRaw(const char* name, std::size_t size) {
|
|||
#define NAMEOF_RAW(...) ::nameof::NameofRaw<decltype(__VA_ARGS__)>(#__VA_ARGS__, (sizeof(#__VA_ARGS__) / sizeof(char)) - 1)
|
||||
|
||||
// Used to obtain the simple (unqualified) string name of a enum variable.
|
||||
#define NAMEOF_ENUM(...) ::nameof::NameofEnum<::std::decay<decltype(__VA_ARGS__)>::type>(__VA_ARGS__)
|
||||
#define NAMEOF_ENUM(...) ::nameof::NameofEnum<decltype(__VA_ARGS__)>(__VA_ARGS__)
|
||||
|
||||
// Used to obtain the string name of a type.
|
||||
#define NAMEOF_TYPE(...) ::nameof::NameofType<decltype(__VA_ARGS__)>()
|
||||
|
|
Loading…
Reference in a new issue