summaryrefslogtreecommitdiffstats
path: root/googlemock
diff options
context:
space:
mode:
authorDino Radakovic <dinor@google.com>2022-01-26 16:38:44 (GMT)
committerCopybara-Service <copybara-worker@google.com>2022-01-26 16:40:27 (GMT)
commit0b7798b2fba340969a0cf83698e5c0a2e25b7dbc (patch)
tree281c951d5ed26682e38212aea5c5914a91b10a8f /googlemock
parentf45d5865ed0b2b8912244627cdf508a24cc6ccb4 (diff)
downloadgoogletest-0b7798b2fba340969a0cf83698e5c0a2e25b7dbc.zip
googletest-0b7798b2fba340969a0cf83698e5c0a2e25b7dbc.tar.gz
googletest-0b7798b2fba340969a0cf83698e5c0a2e25b7dbc.tar.bz2
Change `ReturnArg` to use perfect forwarding of arguments (#3733)
PiperOrigin-RevId: 424355706 Change-Id: I618e5574b4b2c56a343905c20d8cc6d2a70cbcd1
Diffstat (limited to 'googlemock')
-rw-r--r--googlemock/include/gmock/gmock-actions.h6
-rw-r--r--googlemock/test/gmock-more-actions_test.cc6
2 files changed, 9 insertions, 3 deletions
diff --git a/googlemock/include/gmock/gmock-actions.h b/googlemock/include/gmock/gmock-actions.h
index 72663c8..70c325a 100644
--- a/googlemock/include/gmock/gmock-actions.h
+++ b/googlemock/include/gmock/gmock-actions.h
@@ -1079,9 +1079,9 @@ struct ReturnNewAction {
template <size_t k>
struct ReturnArgAction {
template <typename... Args>
- auto operator()(const Args&... args) const ->
- typename std::tuple_element<k, std::tuple<Args...>>::type {
- return std::get<k>(std::tie(args...));
+ auto operator()(Args&&... args) const -> decltype(std::get<k>(
+ std::forward_as_tuple(std::forward<Args>(args)...))) {
+ return std::get<k>(std::forward_as_tuple(std::forward<Args>(args)...));
}
};
diff --git a/googlemock/test/gmock-more-actions_test.cc b/googlemock/test/gmock-more-actions_test.cc
index 53bb029..fdc8c70 100644
--- a/googlemock/test/gmock-more-actions_test.cc
+++ b/googlemock/test/gmock-more-actions_test.cc
@@ -462,6 +462,12 @@ TEST(ReturnArgActionTest, WorksForMultiArgStringArg2) {
EXPECT_EQ("seven", a.Perform(std::make_tuple(5, 6, std::string("seven"), 8)));
}
+TEST(ReturnArgActionTest, WorksForNonConstRefArg0) {
+ const Action<std::string&(std::string&)> a = ReturnArg<0>();
+ std::string s = "12345";
+ EXPECT_EQ(&s, &a.Perform(std::forward_as_tuple(s)));
+}
+
TEST(SaveArgActionTest, WorksForSameType) {
int result = 0;
const Action<void(int n)> a1 = SaveArg<0>(&result);