@@ -86,130 +86,136 @@ struct FlipFlop {
86
86
int member;
87
87
};
88
88
89
- // CallMaybeWithArg(f) resolves either to Invoke (f) or Invoke (f, 42), depending
89
+ // CallMaybeWithArg(f) resolves either to invoke (f) or invoke (f, 42), depending
90
90
// on which one is valid.
91
91
template <typename F>
92
- decltype (Invoke(std::declval<const F&>())) CallMaybeWithArg(const F& f) {
93
- return Invoke (f);
92
+ decltype (base_internal::invoke(std::declval<const F&>())) CallMaybeWithArg(
93
+ const F& f) {
94
+ return base_internal::invoke (f);
94
95
}
95
96
96
97
template <typename F>
97
- decltype (Invoke(std::declval<const F&>(), 42 )) CallMaybeWithArg(const F& f) {
98
- return Invoke (f, 42 );
98
+ decltype (base_internal::invoke(std::declval<const F&>(), 42 )) CallMaybeWithArg(
99
+ const F& f) {
100
+ return base_internal::invoke (f, 42 );
99
101
}
100
102
101
103
TEST (InvokeTest, Function) {
102
- EXPECT_EQ (1 , Invoke (Function, 3 , 2 ));
103
- EXPECT_EQ (1 , Invoke (&Function, 3 , 2 ));
104
+ EXPECT_EQ (1 , base_internal::invoke (Function, 3 , 2 ));
105
+ EXPECT_EQ (1 , base_internal::invoke (&Function, 3 , 2 ));
104
106
}
105
107
106
108
TEST (InvokeTest, NonCopyableArgument) {
107
- EXPECT_EQ (42 , Invoke (Sink, make_unique<int >(42 )));
109
+ EXPECT_EQ (42 , base_internal::invoke (Sink, make_unique<int >(42 )));
108
110
}
109
111
110
112
TEST (InvokeTest, NonCopyableResult) {
111
- EXPECT_THAT (Invoke (Factory, 42 ), ::testing::Pointee (42 ));
113
+ EXPECT_THAT (base_internal::invoke (Factory, 42 ), ::testing::Pointee (42 ));
112
114
}
113
115
114
- TEST (InvokeTest, VoidResult) {
115
- Invoke (NoOp);
116
- }
116
+ TEST (InvokeTest, VoidResult) { base_internal::invoke (NoOp); }
117
117
118
118
TEST (InvokeTest, ConstFunctor) {
119
- EXPECT_EQ (1 , Invoke (ConstFunctor (), 3 , 2 ));
119
+ EXPECT_EQ (1 , base_internal::invoke (ConstFunctor (), 3 , 2 ));
120
120
}
121
121
122
122
TEST (InvokeTest, MutableFunctor) {
123
123
MutableFunctor f;
124
- EXPECT_EQ (1 , Invoke (f, 3 , 2 ));
125
- EXPECT_EQ (1 , Invoke (MutableFunctor (), 3 , 2 ));
124
+ EXPECT_EQ (1 , base_internal::invoke (f, 3 , 2 ));
125
+ EXPECT_EQ (1 , base_internal::invoke (MutableFunctor (), 3 , 2 ));
126
126
}
127
127
128
128
TEST (InvokeTest, EphemeralFunctor) {
129
129
EphemeralFunctor f;
130
- EXPECT_EQ (1 , Invoke (std::move (f), 3 , 2 ));
131
- EXPECT_EQ (1 , Invoke (EphemeralFunctor (), 3 , 2 ));
130
+ EXPECT_EQ (1 , base_internal::invoke (std::move (f), 3 , 2 ));
131
+ EXPECT_EQ (1 , base_internal::invoke (EphemeralFunctor (), 3 , 2 ));
132
132
}
133
133
134
134
TEST (InvokeTest, OverloadedFunctor) {
135
135
OverloadedFunctor f;
136
136
const OverloadedFunctor& cf = f;
137
137
138
- EXPECT_EQ (" &" , Invoke (f));
139
- EXPECT_EQ (" & 42" , Invoke (f, " 42" ));
138
+ EXPECT_EQ (" &" , base_internal::invoke (f));
139
+ EXPECT_EQ (" & 42" , base_internal::invoke (f, " 42" ));
140
+
141
+ EXPECT_EQ (" const&" , base_internal::invoke (cf));
142
+ EXPECT_EQ (" const& 42" , base_internal::invoke (cf, " 42" ));
140
143
141
- EXPECT_EQ (" const&" , Invoke (cf));
142
- EXPECT_EQ (" const& 42" , Invoke (cf, " 42" ));
144
+ EXPECT_EQ (" &&" , base_internal::invoke (std::move (f)));
143
145
144
- EXPECT_EQ ( " && " , Invoke ( std::move (f))) ;
145
- EXPECT_EQ (" && 42" , Invoke (std::move (f ), " 42" ));
146
+ OverloadedFunctor f2 ;
147
+ EXPECT_EQ (" && 42" , base_internal::invoke (std::move (f2 ), " 42" ));
146
148
}
147
149
148
150
TEST (InvokeTest, ReferenceWrapper) {
149
151
ConstFunctor cf;
150
152
MutableFunctor mf;
151
- EXPECT_EQ (1 , Invoke (std::cref (cf), 3 , 2 ));
152
- EXPECT_EQ (1 , Invoke (std::ref (cf), 3 , 2 ));
153
- EXPECT_EQ (1 , Invoke (std::ref (mf), 3 , 2 ));
153
+ EXPECT_EQ (1 , base_internal::invoke (std::cref (cf), 3 , 2 ));
154
+ EXPECT_EQ (1 , base_internal::invoke (std::ref (cf), 3 , 2 ));
155
+ EXPECT_EQ (1 , base_internal::invoke (std::ref (mf), 3 , 2 ));
154
156
}
155
157
156
158
TEST (InvokeTest, MemberFunction) {
157
159
std::unique_ptr<Class> p (new Class);
158
160
std::unique_ptr<const Class> cp (new Class);
159
161
std::unique_ptr<volatile Class> vp (new Class);
160
162
161
- EXPECT_EQ (1 , Invoke (&Class::Method, p, 3 , 2 ));
162
- EXPECT_EQ (1 , Invoke (&Class::Method, p.get (), 3 , 2 ));
163
- EXPECT_EQ (1 , Invoke (&Class::Method, *p, 3 , 2 ));
164
- EXPECT_EQ (1 , Invoke (&Class::RefMethod, p, 3 , 2 ));
165
- EXPECT_EQ (1 , Invoke (&Class::RefMethod, p.get (), 3 , 2 ));
166
- EXPECT_EQ (1 , Invoke (&Class::RefMethod, *p, 3 , 2 ));
167
- EXPECT_EQ (1 , Invoke (&Class::RefRefMethod, std::move (*p), 3 , 2 )); // NOLINT
168
- EXPECT_EQ (1 , Invoke (&Class::NoExceptMethod, p, 3 , 2 ));
169
- EXPECT_EQ (1 , Invoke (&Class::NoExceptMethod, p.get (), 3 , 2 ));
170
- EXPECT_EQ (1 , Invoke (&Class::NoExceptMethod, *p, 3 , 2 ));
171
-
172
- EXPECT_EQ (1 , Invoke (&Class::ConstMethod, p, 3 , 2 ));
173
- EXPECT_EQ (1 , Invoke (&Class::ConstMethod, p.get (), 3 , 2 ));
174
- EXPECT_EQ (1 , Invoke (&Class::ConstMethod, *p, 3 , 2 ));
175
-
176
- EXPECT_EQ (1 , Invoke (&Class::ConstMethod, cp, 3 , 2 ));
177
- EXPECT_EQ (1 , Invoke (&Class::ConstMethod, cp.get (), 3 , 2 ));
178
- EXPECT_EQ (1 , Invoke (&Class::ConstMethod, *cp, 3 , 2 ));
179
-
180
- EXPECT_EQ (1 , Invoke (&Class::VolatileMethod, p, 3 , 2 ));
181
- EXPECT_EQ (1 , Invoke (&Class::VolatileMethod, p.get (), 3 , 2 ));
182
- EXPECT_EQ (1 , Invoke (&Class::VolatileMethod, *p, 3 , 2 ));
183
- EXPECT_EQ (1 , Invoke (&Class::VolatileMethod, vp, 3 , 2 ));
184
- EXPECT_EQ (1 , Invoke (&Class::VolatileMethod, vp.get (), 3 , 2 ));
185
- EXPECT_EQ (1 , Invoke (&Class::VolatileMethod, *vp, 3 , 2 ));
186
-
187
- EXPECT_EQ (1 , Invoke (&Class::Method, make_unique<Class>(), 3 , 2 ));
188
- EXPECT_EQ (1 , Invoke (&Class::ConstMethod, make_unique<Class>(), 3 , 2 ));
189
- EXPECT_EQ (1 , Invoke (&Class::ConstMethod, make_unique<const Class>(), 3 , 2 ));
163
+ EXPECT_EQ (1 , base_internal::invoke (&Class::Method, p, 3 , 2 ));
164
+ EXPECT_EQ (1 , base_internal::invoke (&Class::Method, p.get (), 3 , 2 ));
165
+ EXPECT_EQ (1 , base_internal::invoke (&Class::Method, *p, 3 , 2 ));
166
+ EXPECT_EQ (1 , base_internal::invoke (&Class::RefMethod, p, 3 , 2 ));
167
+ EXPECT_EQ (1 , base_internal::invoke (&Class::RefMethod, p.get (), 3 , 2 ));
168
+ EXPECT_EQ (1 , base_internal::invoke (&Class::RefMethod, *p, 3 , 2 ));
169
+ EXPECT_EQ (1 , base_internal::invoke (&Class::RefRefMethod, std::move (*p), 3 ,
170
+ 2 )); // NOLINT
171
+ EXPECT_EQ (1 , base_internal::invoke (&Class::NoExceptMethod, p, 3 , 2 ));
172
+ EXPECT_EQ (1 , base_internal::invoke (&Class::NoExceptMethod, p.get (), 3 , 2 ));
173
+ EXPECT_EQ (1 , base_internal::invoke (&Class::NoExceptMethod, *p, 3 , 2 ));
174
+
175
+ EXPECT_EQ (1 , base_internal::invoke (&Class::ConstMethod, p, 3 , 2 ));
176
+ EXPECT_EQ (1 , base_internal::invoke (&Class::ConstMethod, p.get (), 3 , 2 ));
177
+ EXPECT_EQ (1 , base_internal::invoke (&Class::ConstMethod, *p, 3 , 2 ));
178
+
179
+ EXPECT_EQ (1 , base_internal::invoke (&Class::ConstMethod, cp, 3 , 2 ));
180
+ EXPECT_EQ (1 , base_internal::invoke (&Class::ConstMethod, cp.get (), 3 , 2 ));
181
+ EXPECT_EQ (1 , base_internal::invoke (&Class::ConstMethod, *cp, 3 , 2 ));
182
+
183
+ EXPECT_EQ (1 , base_internal::invoke (&Class::VolatileMethod, p, 3 , 2 ));
184
+ EXPECT_EQ (1 , base_internal::invoke (&Class::VolatileMethod, p.get (), 3 , 2 ));
185
+ EXPECT_EQ (1 , base_internal::invoke (&Class::VolatileMethod, *p, 3 , 2 ));
186
+ EXPECT_EQ (1 , base_internal::invoke (&Class::VolatileMethod, vp, 3 , 2 ));
187
+ EXPECT_EQ (1 , base_internal::invoke (&Class::VolatileMethod, vp.get (), 3 , 2 ));
188
+ EXPECT_EQ (1 , base_internal::invoke (&Class::VolatileMethod, *vp, 3 , 2 ));
189
+
190
+ EXPECT_EQ (1 ,
191
+ base_internal::invoke (&Class::Method, make_unique<Class>(), 3 , 2 ));
192
+ EXPECT_EQ (1 , base_internal::invoke (&Class::ConstMethod, make_unique<Class>(),
193
+ 3 , 2 ));
194
+ EXPECT_EQ (1 , base_internal::invoke (&Class::ConstMethod,
195
+ make_unique<const Class>(), 3 , 2 ));
190
196
}
191
197
192
198
TEST (InvokeTest, DataMember) {
193
199
std::unique_ptr<Class> p (new Class{42 });
194
200
std::unique_ptr<const Class> cp (new Class{42 });
195
- EXPECT_EQ (42 , Invoke (&Class::member, p));
196
- EXPECT_EQ (42 , Invoke (&Class::member, *p));
197
- EXPECT_EQ (42 , Invoke (&Class::member, p.get ()));
201
+ EXPECT_EQ (42 , base_internal::invoke (&Class::member, p));
202
+ EXPECT_EQ (42 , base_internal::invoke (&Class::member, *p));
203
+ EXPECT_EQ (42 , base_internal::invoke (&Class::member, p.get ()));
198
204
199
- Invoke (&Class::member, p) = 42 ;
200
- Invoke (&Class::member, p.get ()) = 42 ;
205
+ base_internal::invoke (&Class::member, p) = 42 ;
206
+ base_internal::invoke (&Class::member, p.get ()) = 42 ;
201
207
202
- EXPECT_EQ (42 , Invoke (&Class::member, cp));
203
- EXPECT_EQ (42 , Invoke (&Class::member, *cp));
204
- EXPECT_EQ (42 , Invoke (&Class::member, cp.get ()));
208
+ EXPECT_EQ (42 , base_internal::invoke (&Class::member, cp));
209
+ EXPECT_EQ (42 , base_internal::invoke (&Class::member, *cp));
210
+ EXPECT_EQ (42 , base_internal::invoke (&Class::member, cp.get ()));
205
211
}
206
212
207
213
TEST (InvokeTest, FlipFlop) {
208
214
FlipFlop obj = {42 };
209
215
// This call could resolve to (obj.*&FlipFlop::ConstMethod)() or
210
216
// ((*obj).*&FlipFlop::ConstMethod)(). We verify that it's the former.
211
- EXPECT_EQ (42 , Invoke (&FlipFlop::ConstMethod, obj));
212
- EXPECT_EQ (42 , Invoke (&FlipFlop::member, obj));
217
+ EXPECT_EQ (42 , base_internal::invoke (&FlipFlop::ConstMethod, obj));
218
+ EXPECT_EQ (42 , base_internal::invoke (&FlipFlop::member, obj));
213
219
}
214
220
215
221
TEST (InvokeTest, SfinaeFriendly) {
0 commit comments