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());