Support std::reference_wapper as a smart pointer type in gmock

PiperOrigin-RevId: 413963503
Change-Id: I33440780bf087698f4e4325399227405885430b3
pull/3694/head
Abseil Team 4 years ago committed by Copybara-Service
parent 1b2606425c
commit d61d4d8e64
  1. 7
      googlemock/include/gmock/internal/gmock-internal-utils.h
  2. 6
      googlemock/test/gmock-internal-utils_test.cc

@ -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; }

@ -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 {};

Loading…
Cancel
Save