From 1b2606425c4040cacadaa22689423ec0a29f316d Mon Sep 17 00:00:00 2001 From: Abseil Team Date: Thu, 2 Dec 2021 07:43:48 -0800 Subject: [PATCH 1/2] Fix typo in GoogleMock Cookbook. PiperOrigin-RevId: 413674665 Change-Id: I466f87348390f42434a70f183efdf0557be9dddd --- docs/gmock_cook_book.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/gmock_cook_book.md b/docs/gmock_cook_book.md index b41c5b98..9494f122 100644 --- a/docs/gmock_cook_book.md +++ b/docs/gmock_cook_book.md @@ -1084,7 +1084,7 @@ using ::testing::Lt; ``` says that `Blah` will be called with arguments `x`, `y`, and `z` where `x < y < -z`. Note that in this example, it wasn't necessary specify the positional +z`. Note that in this example, it wasn't necessary to specify the positional matchers. As a convenience and example, gMock provides some matchers for 2-tuples, From d61d4d8e64c08a662055e82904bbf90e108a704f Mon Sep 17 00:00:00 2001 From: Abseil Team Date: Fri, 3 Dec 2021 10:13:10 -0800 Subject: [PATCH 2/2] Support std::reference_wapper as a smart pointer type in gmock PiperOrigin-RevId: 413963503 Change-Id: I33440780bf087698f4e4325399227405885430b3 --- googlemock/include/gmock/internal/gmock-internal-utils.h | 7 +++++++ googlemock/test/gmock-internal-utils_test.cc | 6 ++++++ 2 files changed, 13 insertions(+) diff --git a/googlemock/include/gmock/internal/gmock-internal-utils.h b/googlemock/include/gmock/internal/gmock-internal-utils.h index 8ecfbf5a..2975fad9 100644 --- a/googlemock/include/gmock/internal/gmock-internal-utils.h +++ b/googlemock/include/gmock/internal/gmock-internal-utils.h @@ -76,6 +76,13 @@ template 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 +inline const Element* GetRawPointer(const std::reference_wrapper& r) { + return &r.get(); +} + // This overloaded version is for the raw pointer case. template 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 fbb6a83d..494b1fce 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. class Base {};