summaryrefslogtreecommitdiffstats
path: root/googlemock
diff options
context:
space:
mode:
authorAbseil Team <absl-team@google.com>2021-12-03 18:13:10 (GMT)
committerCopybara-Service <copybara-worker@google.com>2021-12-03 18:14:13 (GMT)
commitd61d4d8e64c08a662055e82904bbf90e108a704f (patch)
treef63a7ab70429760a1b12221a5200dae8721311fe /googlemock
parent1b2606425c4040cacadaa22689423ec0a29f316d (diff)
downloadgoogletest-d61d4d8e64c08a662055e82904bbf90e108a704f.zip
googletest-d61d4d8e64c08a662055e82904bbf90e108a704f.tar.gz
googletest-d61d4d8e64c08a662055e82904bbf90e108a704f.tar.bz2
Support std::reference_wapper as a smart pointer type in gmock
PiperOrigin-RevId: 413963503 Change-Id: I33440780bf087698f4e4325399227405885430b3
Diffstat (limited to 'googlemock')
-rw-r--r--googlemock/include/gmock/internal/gmock-internal-utils.h7
-rw-r--r--googlemock/test/gmock-internal-utils_test.cc6
2 files changed, 13 insertions, 0 deletions
diff --git a/googlemock/include/gmock/internal/gmock-internal-utils.h b/googlemock/include/gmock/internal/gmock-internal-utils.h
index 8ecfbf5..2975fad 100644
--- a/googlemock/include/gmock/internal/gmock-internal-utils.h
+++ b/googlemock/include/gmock/internal/gmock-internal-utils.h
@@ -76,6 +76,13 @@ template <typename Pointer>
inline const typename Pointer::element_type* GetRawPointer(const Pointer& p) {
return p.get();
}
+// This overload version is for std::reference_wrapper, which does not work with
+// the overload above, as it does not have an `element_type`.
+template <typename Element>
+inline const Element* GetRawPointer(const std::reference_wrapper<Element>& r) {
+ return &r.get();
+}
+
// This overloaded version is for the raw pointer case.
template <typename Element>
inline Element* GetRawPointer(Element* p) { return p; }
diff --git a/googlemock/test/gmock-internal-utils_test.cc b/googlemock/test/gmock-internal-utils_test.cc
index fbb6a83..494b1fc 100644
--- a/googlemock/test/gmock-internal-utils_test.cc
+++ b/googlemock/test/gmock-internal-utils_test.cc
@@ -140,6 +140,12 @@ TEST(GetRawPointerTest, WorksForRawPointers) {
EXPECT_EQ(&n, GetRawPointer(&n));
}
+TEST(GetRawPointerTest, WorksForStdReferenceWrapper) {
+ int n = 1;
+ EXPECT_EQ(&n, GetRawPointer(std::ref(n)));
+ EXPECT_EQ(&n, GetRawPointer(std::cref(n)));
+}
+
// Tests KindOf<T>.
class Base {};