32 #ifndef NEARGYE_MAGIC_ENUM_FORMAT_HPP
33 #define NEARGYE_MAGIC_ENUM_FORMAT_HPP
40 template <
typename E, std::enable_if_t<std::is_enum_v<std::decay_t<E>>,
int> = 0>
42 using D = std::decay_t<E>;
43 static_assert(std::is_same_v<char, magic_enum::string_view::value_type>,
"magic_enum::formatter requires string_view::value_type type same as char.");
46 if (
const auto name = magic_enum::enum_flags_name<D>(e); !name.empty()) {
47 return {name.data(), name.size()};
50 if (
const auto name = magic_enum::enum_name<D>(e); !name.empty()) {
51 return {name.data(), name.size()};
55 return std::to_string(magic_enum::enum_integer<D>(e));
60 #if defined(__cpp_lib_format)
63 struct std::formatter<E,
std::
enable_if_t<std::is_enum_v<std::decay_t<E>>, char>> : std::formatter<std::string_view, char> {
64 template <
class FormatContext>
65 auto format(E e, FormatContext& ctx)
const {
66 return std::formatter<std::string_view, char>::format(magic_enum::detail::format_as<E>(e), ctx);
72 #if defined(FMT_VERSION)
75 struct fmt::formatter<E,
std::
enable_if_t<std::is_enum_v<std::decay_t<E>>, char>> : fmt::formatter<std::string_view, char> {
76 template <
class FormatContext>
77 auto format(E e, FormatContext& ctx)
const {
78 return fmt::formatter<std::string_view, char>::format(magic_enum::detail::format_as<E>(e), ctx);
84 #endif // NEARGYE_MAGIC_ENUM_FORMAT_HPP