Skip to content

Commit d61d4d8

Browse files
Abseil Teamcopybara-github
authored andcommitted
Support std::reference_wapper as a smart pointer type in gmock
PiperOrigin-RevId: 413963503 Change-Id: I33440780bf087698f4e4325399227405885430b3
1 parent 1b26064 commit d61d4d8

File tree

2 files changed

+13
-0
lines changed

2 files changed

+13
-0
lines changed

googlemock/include/gmock/internal/gmock-internal-utils.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,13 @@ template <typename Pointer>
7676
inline const typename Pointer::element_type* GetRawPointer(const Pointer& p) {
7777
return p.get();
7878
}
79+
// This overload version is for std::reference_wrapper, which does not work with
80+
// the overload above, as it does not have an `element_type`.
81+
template <typename Element>
82+
inline const Element* GetRawPointer(const std::reference_wrapper<Element>& r) {
83+
return &r.get();
84+
}
85+
7986
// This overloaded version is for the raw pointer case.
8087
template <typename Element>
8188
inline Element* GetRawPointer(Element* p) { return p; }

googlemock/test/gmock-internal-utils_test.cc

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,12 @@ TEST(GetRawPointerTest, WorksForRawPointers) {
140140
EXPECT_EQ(&n, GetRawPointer(&n));
141141
}
142142

143+
TEST(GetRawPointerTest, WorksForStdReferenceWrapper) {
144+
int n = 1;
145+
EXPECT_EQ(&n, GetRawPointer(std::ref(n)));
146+
EXPECT_EQ(&n, GetRawPointer(std::cref(n)));
147+
}
148+
143149
// Tests KindOf<T>.
144150

145151
class Base {};

0 commit comments

Comments
 (0)