diff options
author | Dino Radakovic <dinor@google.com> | 2022-01-26 16:38:44 (GMT) |
---|---|---|
committer | Copybara-Service <copybara-worker@google.com> | 2022-01-26 16:40:27 (GMT) |
commit | 0b7798b2fba340969a0cf83698e5c0a2e25b7dbc (patch) | |
tree | 281c951d5ed26682e38212aea5c5914a91b10a8f /googlemock | |
parent | f45d5865ed0b2b8912244627cdf508a24cc6ccb4 (diff) | |
download | googletest-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.h | 6 | ||||
-rw-r--r-- | googlemock/test/gmock-more-actions_test.cc | 6 |
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); |