pw_string: Fix ToString for scoped enumerations

Scoped enumerations do not implicitly convert to their underlying type.

Change-Id: Icdfeab047d857a16f4d9339d384fd206340015f4
diff --git a/pw_string/public/pw_string/to_string.h b/pw_string/public/pw_string/to_string.h
index 41ec052..76eec5d 100644
--- a/pw_string/public/pw_string/to_string.h
+++ b/pw_string/public/pw_string/to_string.h
@@ -71,7 +71,7 @@
   } else if constexpr (std::is_integral_v<T>) {
     return string::IntToString(value, buffer);
   } else if constexpr (std::is_enum_v<T>) {
-    return string::IntToString<std::underlying_type_t<T>>(value, buffer);
+    return string::IntToString(std::underlying_type_t<T>(value), buffer);
   } else if constexpr (std::is_floating_point_v<T>) {
     return string::FloatAsIntToString(value, buffer);
   } else if constexpr (std::is_convertible_v<T, std::string_view>) {
diff --git a/pw_string/to_string_test.cc b/pw_string/to_string_test.cc
index 19d4931..701817e 100644
--- a/pw_string/to_string_test.cc
+++ b/pw_string/to_string_test.cc
@@ -96,6 +96,15 @@
   EXPECT_STREQ("127", buffer);
 }
 
+TEST(ToString, ScopedEnum) {
+  enum class MyEnum : short { kLuckyNumber = 8 };
+
+  auto result = ToString(MyEnum::kLuckyNumber, buffer);
+  EXPECT_EQ(1u, result.size());
+  EXPECT_EQ(Status::OK, result.status());
+  EXPECT_STREQ("8", buffer);
+}
+
 TEST(ToString, Integer_EmptyBuffer_WritesNothing) {
   auto result = ToString(-1234, span(buffer, 0));
   EXPECT_EQ(0u, result.size());