From 33f9a6d3609c7001afc7019c8308f4af8942ce0a Mon Sep 17 00:00:00 2001 From: Victor Zverovich Date: Thu, 3 Dec 2020 15:03:19 -0800 Subject: [PATCH] Fix handling of enums in to_string (#2036) --- include/fmt/format.h | 8 ++++++++ test/format-test.cc | 3 +++ 2 files changed, 11 insertions(+) diff --git a/include/fmt/format.h b/include/fmt/format.h index c8db0471e1a2..49fd93d28edc 100644 --- a/include/fmt/format.h +++ b/include/fmt/format.h @@ -2111,6 +2111,14 @@ FMT_CONSTEXPR OutputIt write(OutputIt out, T value) { return base_iterator(out, it); } +template ::value && + !std::is_same::value)> +FMT_CONSTEXPR OutputIt write(OutputIt out, T value) { + return write( + out, static_cast::type>(value)); +} + template constexpr OutputIt write(OutputIt out, bool value) { return write(out, string_view(value ? "true" : "false")); diff --git a/test/format-test.cc b/test/format-test.cc index bb10460f40f4..eecc0b0579d4 100644 --- a/test/format-test.cc +++ b/test/format-test.cc @@ -1987,6 +1987,9 @@ TEST(FormatTest, ToString) { EXPECT_EQ("42", fmt::to_string(42)); EXPECT_EQ("0x1234", fmt::to_string(reinterpret_cast(0x1234))); EXPECT_EQ("foo", fmt::to_string(adl_test::fmt::detail::foo())); + + enum test_enum : unsigned char { test_value }; + EXPECT_EQ("0", fmt::to_string(test_value)); } TEST(FormatTest, ToWString) { EXPECT_EQ(L"42", fmt::to_wstring(42)); }