Commit afcb7de0 by Abseil Team Committed by Copybara-Service

Add AbslStringify support for enum types in Substitute.

PiperOrigin-RevId: 492481345
Change-Id: Ie77656ed334b54930ee852d31e2794a1fc58ce2f
parent 7cbdff8c
...@@ -203,7 +203,8 @@ class Arg { ...@@ -203,7 +203,8 @@ class Arg {
// This overload matches only scoped enums. // This overload matches only scoped enums.
template <typename T, template <typename T,
typename = typename std::enable_if< typename = typename std::enable_if<
std::is_enum<T>{} && !std::is_convertible<T, int>{}>::type> std::is_enum<T>{} && !std::is_convertible<T, int>{} &&
!strings_internal::HasAbslStringify<T>::value>::type>
Arg(T value) // NOLINT(google-explicit-constructor) Arg(T value) // NOLINT(google-explicit-constructor)
: Arg(static_cast<typename std::underlying_type<T>::type>(value)) {} : Arg(static_cast<typename std::underlying_type<T>::type>(value)) {}
......
...@@ -253,6 +253,18 @@ TEST(SubstituteTest, Enums) { ...@@ -253,6 +253,18 @@ TEST(SubstituteTest, Enums) {
ScopedEnumUInt16::kEnum1)); ScopedEnumUInt16::kEnum1));
} }
enum class EnumWithStringify { Many = 0, Choices = 1 };
template <typename Sink>
void AbslStringify(Sink& sink, EnumWithStringify e) {
sink.Append(e == EnumWithStringify::Many ? "Many" : "Choices");
}
TEST(SubstituteTest, AbslStringifyWithEnum) {
const auto e = EnumWithStringify::Choices;
EXPECT_EQ(absl::Substitute("$0", e), "Choices");
}
#ifdef GTEST_HAS_DEATH_TEST #ifdef GTEST_HAS_DEATH_TEST
TEST(SubstituteDeathTest, SubstituteDeath) { TEST(SubstituteDeathTest, SubstituteDeath) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment