Skip to content

Commit 0b7798b

Browse files
dinordcopybara-github
authored andcommitted
Change ReturnArg to use perfect forwarding of arguments (#3733)
PiperOrigin-RevId: 424355706 Change-Id: I618e5574b4b2c56a343905c20d8cc6d2a70cbcd1
1 parent f45d586 commit 0b7798b

File tree

2 files changed

+9
-3
lines changed

2 files changed

+9
-3
lines changed

googlemock/include/gmock/gmock-actions.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1079,9 +1079,9 @@ struct ReturnNewAction {
10791079
template <size_t k>
10801080
struct ReturnArgAction {
10811081
template <typename... Args>
1082-
auto operator()(const Args&... args) const ->
1083-
typename std::tuple_element<k, std::tuple<Args...>>::type {
1084-
return std::get<k>(std::tie(args...));
1082+
auto operator()(Args&&... args) const -> decltype(std::get<k>(
1083+
std::forward_as_tuple(std::forward<Args>(args)...))) {
1084+
return std::get<k>(std::forward_as_tuple(std::forward<Args>(args)...));
10851085
}
10861086
};
10871087

googlemock/test/gmock-more-actions_test.cc

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -462,6 +462,12 @@ TEST(ReturnArgActionTest, WorksForMultiArgStringArg2) {
462462
EXPECT_EQ("seven", a.Perform(std::make_tuple(5, 6, std::string("seven"), 8)));
463463
}
464464

465+
TEST(ReturnArgActionTest, WorksForNonConstRefArg0) {
466+
const Action<std::string&(std::string&)> a = ReturnArg<0>();
467+
std::string s = "12345";
468+
EXPECT_EQ(&s, &a.Perform(std::forward_as_tuple(s)));
469+
}
470+
465471
TEST(SaveArgActionTest, WorksForSameType) {
466472
int result = 0;
467473
const Action<void(int n)> a1 = SaveArg<0>(&result);

0 commit comments

Comments
 (0)