diff options
-rw-r--r-- | include/gtest/internal/gtest-internal.h | 6 | ||||
-rw-r--r-- | test/gtest_unittest.cc | 15 |
2 files changed, 20 insertions, 1 deletions
diff --git a/include/gtest/internal/gtest-internal.h b/include/gtest/internal/gtest-internal.h index 3c5d1f7..bf8412b 100644 --- a/include/gtest/internal/gtest-internal.h +++ b/include/gtest/internal/gtest-internal.h @@ -842,6 +842,10 @@ struct RemoveConst<T[N]> { #define GTEST_REMOVE_CONST_(T) \ typename ::testing::internal::RemoveConst<T>::type +// Turns const U&, U&, const U, and U all into U. +#define GTEST_REMOVE_REFERENCE_AND_CONST_(T) \ + GTEST_REMOVE_CONST_(GTEST_REMOVE_REFERENCE_(T)) + // Adds reference to a type if it is not a reference type, // otherwise leaves it unchanged. This is the same as // tr1::add_reference, which is not widely available yet. @@ -1046,7 +1050,7 @@ class NativeArray { // Ensures that the user doesn't instantiate NativeArray with a // const or reference type. static_cast<void>(StaticAssertTypeEqHelper<Element, - GTEST_REMOVE_CONST_(GTEST_REMOVE_REFERENCE_(Element))>()); + GTEST_REMOVE_REFERENCE_AND_CONST_(Element)>()); if (relation_to_source_ == kCopy) delete[] array_; } diff --git a/test/gtest_unittest.cc b/test/gtest_unittest.cc index a92809f..40049ae 100644 --- a/test/gtest_unittest.cc +++ b/test/gtest_unittest.cc @@ -6834,6 +6834,21 @@ TEST(RemoveConstTest, MacroVersion) { TestGTestRemoveConst<char, const char>(); } +// Tests GTEST_REMOVE_REFERENCE_AND_CONST_. + +template <typename T1, typename T2> +void TestGTestRemoveReferenceAndConst() { + CompileAssertTypesEqual<T1, GTEST_REMOVE_REFERENCE_AND_CONST_(T2)>(); +} + +TEST(RemoveReferenceToConstTest, Works) { + TestGTestRemoveReferenceAndConst<int, int>(); + TestGTestRemoveReferenceAndConst<double, double&>(); + TestGTestRemoveReferenceAndConst<char, const char>(); + TestGTestRemoveReferenceAndConst<char, const char&>(); + TestGTestRemoveReferenceAndConst<const char*, const char*>(); +} + // Tests that AddReference does not affect reference types. TEST(AddReferenceTest, DoesNotAffectReferenceType) { CompileAssertTypesEqual<int&, AddReference<int&>::type>(); |