diff options
author | zhanyong.wan <zhanyong.wan@861a406c-534a-0410-8894-cb66d6ee9925> | 2010-05-17 19:31:00 +0000 |
---|---|---|
committer | zhanyong.wan <zhanyong.wan@861a406c-534a-0410-8894-cb66d6ee9925> | 2010-05-17 19:31:00 +0000 |
commit | 55d166a2228d7e3b3500b8651ab9b8e56fb43b7e (patch) | |
tree | e7ef15e366514486e98b985e45f72a4b76bf6471 | |
parent | 65f2fd5920ad2b761e48d070b32540af1a09c531 (diff) | |
download | googletest-55d166a2228d7e3b3500b8651ab9b8e56fb43b7e.tar.gz googletest-55d166a2228d7e3b3500b8651ab9b8e56fb43b7e.tar.bz2 googletest-55d166a2228d7e3b3500b8651ab9b8e56fb43b7e.zip |
Adds GTEST_REMOVE_REFERENCE_AND_CONST_.
-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 3c5d1f76..bf8412b9 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 a92809f7..40049aef 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>(); |