diff --git a/rtc_base/checks.h b/rtc_base/checks.h index b351ad2e21..2694258fe5 100644 --- a/rtc_base/checks.h +++ b/rtc_base/checks.h @@ -168,16 +168,6 @@ inline Val MakeVal(const void* x) { return {x}; } -// The enum class types are not implicitly convertible to arithmetic types. -template < - typename T, - typename std::enable_if::value && - !std::is_arithmetic::value>::type* = nullptr> -inline decltype(MakeVal(std::declval::type>())) -MakeVal(T x) { - return {static_cast::type>(x)}; -} - // Ephemeral type that represents the result of the logging << operator. template class LogStreamer; @@ -186,18 +176,18 @@ class LogStreamer; template <> class LogStreamer<> final { public: - template ::value || - std::is_enum::value>::type* = nullptr> + template < + typename U, + typename std::enable_if::value>::type* = nullptr> RTC_FORCE_INLINE LogStreamer()))> operator<<( U arg) const { return LogStreamer()))>(MakeVal(arg), this); } - template ::value && - !std::is_enum::value>::type* = nullptr> + template < + typename U, + typename std::enable_if::value>::type* = nullptr> RTC_FORCE_INLINE LogStreamer()))> operator<<( const U& arg) const { return LogStreamer()))>(MakeVal(arg), @@ -232,18 +222,18 @@ class LogStreamer final { RTC_FORCE_INLINE LogStreamer(T arg, const LogStreamer* prior) : arg_(arg), prior_(prior) {} - template ::value || - std::is_enum::value>::type* = nullptr> + template < + typename U, + typename std::enable_if::value>::type* = nullptr> RTC_FORCE_INLINE LogStreamer())), T, Ts...> operator<<(U arg) const { return LogStreamer())), T, Ts...>( MakeVal(arg), this); } - template ::value && - !std::is_enum::value>::type* = nullptr> + template < + typename U, + typename std::enable_if::value>::type* = nullptr> RTC_FORCE_INLINE LogStreamer())), T, Ts...> operator<<(const U& arg) const { return LogStreamer())), T, Ts...>( diff --git a/rtc_base/logging.h b/rtc_base/logging.h index 3f48eeb0de..5cd4f72f22 100644 --- a/rtc_base/logging.h +++ b/rtc_base/logging.h @@ -248,16 +248,6 @@ inline Val MakeVal( return {x}; } -// The enum class types are not implicitly convertible to arithmetic types. -template < - typename T, - typename std::enable_if::value && - !std::is_arithmetic::value>::type* = nullptr> -inline decltype(MakeVal(std::declval::type>())) -MakeVal(T x) { - return {static_cast::type>(x)}; -} - #ifdef WEBRTC_ANDROID inline Val MakeVal( const LogMetadataTag& x) { @@ -295,18 +285,18 @@ class LogStreamer; template <> class LogStreamer<> final { public: - template ::value || - std::is_enum::value>::type* = nullptr> + template < + typename U, + typename std::enable_if::value>::type* = nullptr> RTC_FORCE_INLINE LogStreamer()))> operator<<( U arg) const { return LogStreamer()))>(MakeVal(arg), this); } - template ::value && - !std::is_enum::value>::type* = nullptr> + template < + typename U, + typename std::enable_if::value>::type* = nullptr> RTC_FORCE_INLINE LogStreamer()))> operator<<( const U& arg) const { return LogStreamer()))>(MakeVal(arg), @@ -328,18 +318,18 @@ class LogStreamer final { RTC_FORCE_INLINE LogStreamer(T arg, const LogStreamer* prior) : arg_(arg), prior_(prior) {} - template ::value || - std::is_enum::value>::type* = nullptr> + template < + typename U, + typename std::enable_if::value>::type* = nullptr> RTC_FORCE_INLINE LogStreamer())), T, Ts...> operator<<(U arg) const { return LogStreamer())), T, Ts...>( MakeVal(arg), this); } - template ::value && - !std::is_enum::value>::type* = nullptr> + template < + typename U, + typename std::enable_if::value>::type* = nullptr> RTC_FORCE_INLINE LogStreamer())), T, Ts...> operator<<(const U& arg) const { return LogStreamer())), T, Ts...>( diff --git a/rtc_base/logging_unittest.cc b/rtc_base/logging_unittest.cc index 4f05ac00cf..e49440dce1 100644 --- a/rtc_base/logging_unittest.cc +++ b/rtc_base/logging_unittest.cc @@ -368,16 +368,4 @@ TEST(LogTest, Perf) { << " total bytes logged: " << str.size(); } -TEST(LogTest, EnumsAreSupported) { - enum class TestEnum { kValue0 = 0, kValue1 = 1 }; - std::string str; - LogSinkImpl stream(&str); - LogMessage::AddLogToStream(&stream, LS_INFO); - RTC_LOG(LS_INFO) << "[" << TestEnum::kValue0 << "]"; - EXPECT_NE(std::string::npos, str.find("[0]")); - EXPECT_EQ(std::string::npos, str.find("[1]")); - RTC_LOG(LS_INFO) << "[" << TestEnum::kValue1 << "]"; - EXPECT_NE(std::string::npos, str.find("[1]")); -} - } // namespace rtc