Googletest export
Merge 7f4f58da20e1066a888d3e4bcbef541db798a605 into 90a443f9c2
Closes #2395
COPYBARA_INTEGRATE_REVIEW=https://github.com/google/googletest/pull/2395 from kuzkry:custom-type-traits-remove_reference 7f4f58da20e1066a888d3e4bcbef541db798a605
PiperOrigin-RevId: 266189044
This commit is contained in:
committed by
Gennadiy Rozental
parent
565f1b8482
commit
ab8f346b07
@@ -856,30 +856,16 @@ template <typename T>
|
||||
struct CompileAssertTypesEqual<T, T> {
|
||||
};
|
||||
|
||||
// Removes the reference from a type if it is a reference type,
|
||||
// otherwise leaves it unchanged. This is the same as
|
||||
// tr1::remove_reference, which is not widely available yet.
|
||||
template <typename T>
|
||||
struct RemoveReference { typedef T type; }; // NOLINT
|
||||
template <typename T>
|
||||
struct RemoveReference<T&> { typedef T type; }; // NOLINT
|
||||
|
||||
// A handy wrapper around RemoveReference that works when the argument
|
||||
// T depends on template parameters.
|
||||
#define GTEST_REMOVE_REFERENCE_(T) \
|
||||
typename ::testing::internal::RemoveReference<T>::type
|
||||
|
||||
// Turns const U&, U&, const U, and U all into U.
|
||||
#define GTEST_REMOVE_REFERENCE_AND_CONST_(T) \
|
||||
typename std::remove_const<GTEST_REMOVE_REFERENCE_(T)>::type
|
||||
typename std::remove_const<typename std::remove_reference<T>::type>::type
|
||||
|
||||
// IsAProtocolMessage<T>::value is a compile-time bool constant that's
|
||||
// true if T is type proto2::Message or a subclass of it.
|
||||
template <typename T>
|
||||
struct IsAProtocolMessage
|
||||
: public bool_constant<
|
||||
std::is_convertible<const T*, const ::proto2::Message*>::value> {
|
||||
};
|
||||
std::is_convertible<const T*, const ::proto2::Message*>::value> {};
|
||||
|
||||
// When the compiler sees expression IsContainerTest<C>(0), if C is an
|
||||
// STL-style container class, the first overload of IsContainerTest
|
||||
|
||||
@@ -262,7 +262,6 @@ using testing::internal::OsStackTraceGetterInterface;
|
||||
using testing::internal::ParseInt32Flag;
|
||||
using testing::internal::RelationToSourceCopy;
|
||||
using testing::internal::RelationToSourceReference;
|
||||
using testing::internal::RemoveReference;
|
||||
using testing::internal::ShouldRunTestOnShard;
|
||||
using testing::internal::ShouldShard;
|
||||
using testing::internal::ShouldUseColor;
|
||||
@@ -7110,30 +7109,6 @@ TEST(CompileAssertTypesEqual, CompilesWhenTypesAreEqual) {
|
||||
CompileAssertTypesEqual<int*, int*>();
|
||||
}
|
||||
|
||||
// Tests that RemoveReference does not affect non-reference types.
|
||||
TEST(RemoveReferenceTest, DoesNotAffectNonReferenceType) {
|
||||
CompileAssertTypesEqual<int, RemoveReference<int>::type>();
|
||||
CompileAssertTypesEqual<const char, RemoveReference<const char>::type>();
|
||||
}
|
||||
|
||||
// Tests that RemoveReference removes reference from reference types.
|
||||
TEST(RemoveReferenceTest, RemovesReference) {
|
||||
CompileAssertTypesEqual<int, RemoveReference<int&>::type>();
|
||||
CompileAssertTypesEqual<const char, RemoveReference<const char&>::type>();
|
||||
}
|
||||
|
||||
// Tests GTEST_REMOVE_REFERENCE_.
|
||||
|
||||
template <typename T1, typename T2>
|
||||
void TestGTestRemoveReference() {
|
||||
CompileAssertTypesEqual<T1, GTEST_REMOVE_REFERENCE_(T2)>();
|
||||
}
|
||||
|
||||
TEST(RemoveReferenceTest, MacroVersion) {
|
||||
TestGTestRemoveReference<int, int>();
|
||||
TestGTestRemoveReference<const char, const char&>();
|
||||
}
|
||||
|
||||
// Tests GTEST_REMOVE_REFERENCE_AND_CONST_.
|
||||
|
||||
template <typename T1, typename T2>
|
||||
|
||||
Reference in New Issue
Block a user