diff options
-rw-r--r-- | googletest/include/gtest/internal/gtest-internal.h | 15 | ||||
-rw-r--r-- | googletest/test/gtest_unittest.cc | 4 |
2 files changed, 17 insertions, 2 deletions
diff --git a/googletest/include/gtest/internal/gtest-internal.h b/googletest/include/gtest/internal/gtest-internal.h index 7f1a5b00..c36029ee 100644 --- a/googletest/include/gtest/internal/gtest-internal.h +++ b/googletest/include/gtest/internal/gtest-internal.h @@ -94,6 +94,12 @@ namespace proto2 { class MessageLite; } +namespace google { +namespace protobuf { +class MessageLite; +} +} + namespace testing { // Forward declarations. @@ -881,10 +887,15 @@ class GTEST_API_ Random { typename std::remove_const<typename std::remove_reference<T>::type>::type // IsAProtocolMessage<T>::value is a compile-time bool constant that's -// true if and only if T is type proto2::MessageLite or a subclass of it. +// true if and only if T is type proto2::MessageLite or +// google::protobuf::MessageLite or a subclass of one of them. template <typename T> struct IsAProtocolMessage - : public std::is_convertible<const T*, const ::proto2::MessageLite*> {}; + : public std::integral_constant< + bool, + std::is_convertible<const T*, const ::proto2::MessageLite*>::value || + std::is_convertible< + const T*, const ::google::protobuf::MessageLite*>::value> {}; // When the compiler sees expression IsContainerTest<C>(0), if C is an // STL-style container class, the first overload of IsContainerTest diff --git a/googletest/test/gtest_unittest.cc b/googletest/test/gtest_unittest.cc index 005a2d40..631180e3 100644 --- a/googletest/test/gtest_unittest.cc +++ b/googletest/test/gtest_unittest.cc @@ -7115,6 +7115,10 @@ TEST(IsAProtocolMessageTest, ValueIsTrueWhenTypeIsAProtocolMessage) { EXPECT_TRUE(IsAProtocolMessage<::proto2::MessageLite>::value); } +TEST(IsAProtocolMessageTest, ValueIsTrueWhenTypeIsAnOpenSourceProtocolMessage) { + EXPECT_TRUE(IsAProtocolMessage<::google::protobuf::MessageLite>::value); +} + // Tests that IsAProtocolMessage<T>::value is false when T is neither // ::proto2::Message nor a sub-class of it. TEST(IsAProtocolMessageTest, ValueIsFalseWhenTypeIsNotAProtocolMessage) { |