Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(72)

Side by Side Diff: testing/gmock_mutant.h

Issue 1159553007: Move Tuple to base namespace. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « testing/generate_gmock_mutant.py ('k') | tools/ipc_fuzzer/fuzzer/fuzzer.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // This file automatically generated by testing/generate_gmock_mutant.py. 5 // This file automatically generated by testing/generate_gmock_mutant.py.
6 // DO NOT EDIT. 6 // DO NOT EDIT.
7 7
8 #ifndef TESTING_GMOCK_MUTANT_H_ 8 #ifndef TESTING_GMOCK_MUTANT_H_
9 #define TESTING_GMOCK_MUTANT_H_ 9 #define TESTING_GMOCK_MUTANT_H_
10 10
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
97 // EXPECT_CALL(mock, DemiurgeCreated(_)).Times(1) 97 // EXPECT_CALL(mock, DemiurgeCreated(_)).Times(1)
98 // .WillOnce(Invoke(CreateFunctor(&mock, &Mock::StoreDemiurge))); 98 // .WillOnce(Invoke(CreateFunctor(&mock, &Mock::StoreDemiurge)));
99 // 99 //
100 // EXPECT_CALL(mock, OnRequest(_, StrEq("Moby Dick"))) 100 // EXPECT_CALL(mock, OnRequest(_, StrEq("Moby Dick")))
101 // .Times(AnyNumber()) 101 // .Times(AnyNumber())
102 // .WillAlways(WithArgs<0>(Invoke( 102 // .WillAlways(WithArgs<0>(Invoke(
103 // CreateFunctor(&mock->demiurge_, &Demiurge::DecreaseMonsters)))); 103 // CreateFunctor(&mock->demiurge_, &Demiurge::DecreaseMonsters))));
104 // 104 //
105 105
106 #include "base/memory/linked_ptr.h" 106 #include "base/memory/linked_ptr.h"
107 #include "base/tuple.h" // for Tuple 107 #include "base/tuple.h"
108 108
109 namespace testing { 109 namespace testing {
110 110
111 // 0 - 0 111 // 0 - 0
112 template <typename R, typename T, typename Method> 112 template <typename R, typename T, typename Method>
113 inline R DispatchToMethod(T* obj, Method method, 113 inline R DispatchToMethod(T* obj, Method method,
114 const Tuple<>& p, 114 const base::Tuple<>& p,
115 const Tuple<>& c) { 115 const base::Tuple<>& c) {
116 return (obj->*method)(); 116 return (obj->*method)();
117 } 117 }
118 template <typename R, typename Function> 118 template <typename R, typename Function>
119 inline R DispatchToFunction(Function function, 119 inline R DispatchToFunction(Function function,
120 const Tuple<>& p, 120 const base::Tuple<>& p,
121 const Tuple<>& c) { 121 const base::Tuple<>& c) {
122 return (*function)(); 122 return (*function)();
123 } 123 }
124 124
125 // 0 - 1 125 // 0 - 1
126 template <typename R, typename T, typename Method, typename C1> 126 template <typename R, typename T, typename Method, typename C1>
127 inline R DispatchToMethod(T* obj, Method method, 127 inline R DispatchToMethod(T* obj, Method method,
128 const Tuple<>& p, 128 const base::Tuple<>& p,
129 const Tuple<C1>& c) { 129 const base::Tuple<C1>& c) {
130 return (obj->*method)(get<0>(c)); 130 return (obj->*method)(base::get<0>(c));
131 } 131 }
132 template <typename R, typename Function, typename C1> 132 template <typename R, typename Function, typename C1>
133 inline R DispatchToFunction(Function function, 133 inline R DispatchToFunction(Function function,
134 const Tuple<>& p, 134 const base::Tuple<>& p,
135 const Tuple<C1>& c) { 135 const base::Tuple<C1>& c) {
136 return (*function)(get<0>(c)); 136 return (*function)(base::get<0>(c));
137 } 137 }
138 138
139 // 0 - 2 139 // 0 - 2
140 template <typename R, typename T, typename Method, typename C1, typename C2> 140 template <typename R, typename T, typename Method, typename C1, typename C2>
141 inline R DispatchToMethod(T* obj, Method method, 141 inline R DispatchToMethod(T* obj, Method method,
142 const Tuple<>& p, 142 const base::Tuple<>& p,
143 const Tuple<C1, C2>& c) { 143 const base::Tuple<C1, C2>& c) {
144 return (obj->*method)(get<0>(c), get<1>(c)); 144 return (obj->*method)(base::get<0>(c), base::get<1>(c));
145 } 145 }
146 template <typename R, typename Function, typename C1, typename C2> 146 template <typename R, typename Function, typename C1, typename C2>
147 inline R DispatchToFunction(Function function, 147 inline R DispatchToFunction(Function function,
148 const Tuple<>& p, 148 const base::Tuple<>& p,
149 const Tuple<C1, C2>& c) { 149 const base::Tuple<C1, C2>& c) {
150 return (*function)(get<0>(c), get<1>(c)); 150 return (*function)(base::get<0>(c), base::get<1>(c));
151 } 151 }
152 152
153 // 0 - 3 153 // 0 - 3
154 template <typename R, typename T, typename Method, typename C1, typename C2, 154 template <typename R, typename T, typename Method, typename C1, typename C2,
155 typename C3> 155 typename C3>
156 inline R DispatchToMethod(T* obj, Method method, 156 inline R DispatchToMethod(T* obj, Method method,
157 const Tuple<>& p, 157 const base::Tuple<>& p,
158 const Tuple<C1, C2, C3>& c) { 158 const base::Tuple<C1, C2, C3>& c) {
159 return (obj->*method)(get<0>(c), get<1>(c), get<2>(c)); 159 return (obj->*method)(base::get<0>(c), base::get<1>(c), base::get<2>(c));
160 } 160 }
161 template <typename R, typename Function, typename C1, typename C2, typename C3> 161 template <typename R, typename Function, typename C1, typename C2, typename C3>
162 inline R DispatchToFunction(Function function, 162 inline R DispatchToFunction(Function function,
163 const Tuple<>& p, 163 const base::Tuple<>& p,
164 const Tuple<C1, C2, C3>& c) { 164 const base::Tuple<C1, C2, C3>& c) {
165 return (*function)(get<0>(c), get<1>(c), get<2>(c)); 165 return (*function)(base::get<0>(c), base::get<1>(c), base::get<2>(c));
166 } 166 }
167 167
168 // 0 - 4 168 // 0 - 4
169 template <typename R, typename T, typename Method, typename C1, typename C2, 169 template <typename R, typename T, typename Method, typename C1, typename C2,
170 typename C3, typename C4> 170 typename C3, typename C4>
171 inline R DispatchToMethod(T* obj, Method method, 171 inline R DispatchToMethod(T* obj, Method method,
172 const Tuple<>& p, 172 const base::Tuple<>& p,
173 const Tuple<C1, C2, C3, C4>& c) { 173 const base::Tuple<C1, C2, C3, C4>& c) {
174 return (obj->*method)(get<0>(c), get<1>(c), get<2>(c), get<3>(c)); 174 return (obj->*method)(base::get<0>(c), base::get<1>(c), base::get<2>(c),
175 base::get<3>(c));
175 } 176 }
176 template <typename R, typename Function, typename C1, typename C2, typename C3, 177 template <typename R, typename Function, typename C1, typename C2, typename C3,
177 typename C4> 178 typename C4>
178 inline R DispatchToFunction(Function function, 179 inline R DispatchToFunction(Function function,
179 const Tuple<>& p, 180 const base::Tuple<>& p,
180 const Tuple<C1, C2, C3, C4>& c) { 181 const base::Tuple<C1, C2, C3, C4>& c) {
181 return (*function)(get<0>(c), get<1>(c), get<2>(c), get<3>(c)); 182 return (*function)(base::get<0>(c), base::get<1>(c), base::get<2>(c),
183 base::get<3>(c));
182 } 184 }
183 185
184 // 0 - 5 186 // 0 - 5
185 template <typename R, typename T, typename Method, typename C1, typename C2, 187 template <typename R, typename T, typename Method, typename C1, typename C2,
186 typename C3, typename C4, typename C5> 188 typename C3, typename C4, typename C5>
187 inline R DispatchToMethod(T* obj, Method method, 189 inline R DispatchToMethod(T* obj, Method method,
188 const Tuple<>& p, 190 const base::Tuple<>& p,
189 const Tuple<C1, C2, C3, C4, C5>& c) { 191 const base::Tuple<C1, C2, C3, C4, C5>& c) {
190 return (obj->*method)(get<0>(c), get<1>(c), get<2>(c), get<3>(c), get<4>(c)); 192 return (obj->*method)(base::get<0>(c), base::get<1>(c), base::get<2>(c),
193 base::get<3>(c), base::get<4>(c));
191 } 194 }
192 template <typename R, typename Function, typename C1, typename C2, typename C3, 195 template <typename R, typename Function, typename C1, typename C2, typename C3,
193 typename C4, typename C5> 196 typename C4, typename C5>
194 inline R DispatchToFunction(Function function, 197 inline R DispatchToFunction(Function function,
195 const Tuple<>& p, 198 const base::Tuple<>& p,
196 const Tuple<C1, C2, C3, C4, C5>& c) { 199 const base::Tuple<C1, C2, C3, C4, C5>& c) {
197 return (*function)(get<0>(c), get<1>(c), get<2>(c), get<3>(c), get<4>(c)); 200 return (*function)(base::get<0>(c), base::get<1>(c), base::get<2>(c),
201 base::get<3>(c), base::get<4>(c));
198 } 202 }
199 203
200 // 0 - 6 204 // 0 - 6
201 template <typename R, typename T, typename Method, typename C1, typename C2, 205 template <typename R, typename T, typename Method, typename C1, typename C2,
202 typename C3, typename C4, typename C5, typename C6> 206 typename C3, typename C4, typename C5, typename C6>
203 inline R DispatchToMethod(T* obj, Method method, 207 inline R DispatchToMethod(T* obj, Method method,
204 const Tuple<>& p, 208 const base::Tuple<>& p,
205 const Tuple<C1, C2, C3, C4, C5, C6>& c) { 209 const base::Tuple<C1, C2, C3, C4, C5, C6>& c) {
206 return (obj->*method)(get<0>(c), get<1>(c), get<2>(c), get<3>(c), get<4>(c), g et<5>(c)); 210 return (obj->*method)(base::get<0>(c), base::get<1>(c), base::get<2>(c),
211 base::get<3>(c), base::get<4>(c), base::get<5>(c));
207 } 212 }
208 template <typename R, typename Function, typename C1, typename C2, typename C3, 213 template <typename R, typename Function, typename C1, typename C2, typename C3,
209 typename C4, typename C5, typename C6> 214 typename C4, typename C5, typename C6>
210 inline R DispatchToFunction(Function function, 215 inline R DispatchToFunction(Function function,
211 const Tuple<>& p, 216 const base::Tuple<>& p,
212 const Tuple<C1, C2, C3, C4, C5, C6>& c) { 217 const base::Tuple<C1, C2, C3, C4, C5, C6>& c) {
213 return (*function)(get<0>(c), get<1>(c), get<2>(c), get<3>(c), get<4>(c), get< 5>(c)); 218 return (*function)(base::get<0>(c), base::get<1>(c), base::get<2>(c),
219 base::get<3>(c), base::get<4>(c), base::get<5>(c));
214 } 220 }
215 221
216 // 1 - 0 222 // 1 - 0
217 template <typename R, typename T, typename Method, typename P1> 223 template <typename R, typename T, typename Method, typename P1>
218 inline R DispatchToMethod(T* obj, Method method, 224 inline R DispatchToMethod(T* obj, Method method,
219 const Tuple<P1>& p, 225 const base::Tuple<P1>& p,
220 const Tuple<>& c) { 226 const base::Tuple<>& c) {
221 return (obj->*method)(get<0>(p)); 227 return (obj->*method)(base::get<0>(p));
222 } 228 }
223 template <typename R, typename Function, typename P1> 229 template <typename R, typename Function, typename P1>
224 inline R DispatchToFunction(Function function, 230 inline R DispatchToFunction(Function function,
225 const Tuple<P1>& p, 231 const base::Tuple<P1>& p,
226 const Tuple<>& c) { 232 const base::Tuple<>& c) {
227 return (*function)(get<0>(p)); 233 return (*function)(base::get<0>(p));
228 } 234 }
229 235
230 // 1 - 1 236 // 1 - 1
231 template <typename R, typename T, typename Method, typename P1, typename C1> 237 template <typename R, typename T, typename Method, typename P1, typename C1>
232 inline R DispatchToMethod(T* obj, Method method, 238 inline R DispatchToMethod(T* obj, Method method,
233 const Tuple<P1>& p, 239 const base::Tuple<P1>& p,
234 const Tuple<C1>& c) { 240 const base::Tuple<C1>& c) {
235 return (obj->*method)(get<0>(p), get<0>(c)); 241 return (obj->*method)(base::get<0>(p), base::get<0>(c));
236 } 242 }
237 template <typename R, typename Function, typename P1, typename C1> 243 template <typename R, typename Function, typename P1, typename C1>
238 inline R DispatchToFunction(Function function, 244 inline R DispatchToFunction(Function function,
239 const Tuple<P1>& p, 245 const base::Tuple<P1>& p,
240 const Tuple<C1>& c) { 246 const base::Tuple<C1>& c) {
241 return (*function)(get<0>(p), get<0>(c)); 247 return (*function)(base::get<0>(p), base::get<0>(c));
242 } 248 }
243 249
244 // 1 - 2 250 // 1 - 2
245 template <typename R, typename T, typename Method, typename P1, typename C1, 251 template <typename R, typename T, typename Method, typename P1, typename C1,
246 typename C2> 252 typename C2>
247 inline R DispatchToMethod(T* obj, Method method, 253 inline R DispatchToMethod(T* obj, Method method,
248 const Tuple<P1>& p, 254 const base::Tuple<P1>& p,
249 const Tuple<C1, C2>& c) { 255 const base::Tuple<C1, C2>& c) {
250 return (obj->*method)(get<0>(p), get<0>(c), get<1>(c)); 256 return (obj->*method)(base::get<0>(p), base::get<0>(c), base::get<1>(c));
251 } 257 }
252 template <typename R, typename Function, typename P1, typename C1, typename C2> 258 template <typename R, typename Function, typename P1, typename C1, typename C2>
253 inline R DispatchToFunction(Function function, 259 inline R DispatchToFunction(Function function,
254 const Tuple<P1>& p, 260 const base::Tuple<P1>& p,
255 const Tuple<C1, C2>& c) { 261 const base::Tuple<C1, C2>& c) {
256 return (*function)(get<0>(p), get<0>(c), get<1>(c)); 262 return (*function)(base::get<0>(p), base::get<0>(c), base::get<1>(c));
257 } 263 }
258 264
259 // 1 - 3 265 // 1 - 3
260 template <typename R, typename T, typename Method, typename P1, typename C1, 266 template <typename R, typename T, typename Method, typename P1, typename C1,
261 typename C2, typename C3> 267 typename C2, typename C3>
262 inline R DispatchToMethod(T* obj, Method method, 268 inline R DispatchToMethod(T* obj, Method method,
263 const Tuple<P1>& p, 269 const base::Tuple<P1>& p,
264 const Tuple<C1, C2, C3>& c) { 270 const base::Tuple<C1, C2, C3>& c) {
265 return (obj->*method)(get<0>(p), get<0>(c), get<1>(c), get<2>(c)); 271 return (obj->*method)(base::get<0>(p), base::get<0>(c), base::get<1>(c),
272 base::get<2>(c));
266 } 273 }
267 template <typename R, typename Function, typename P1, typename C1, typename C2, 274 template <typename R, typename Function, typename P1, typename C1, typename C2,
268 typename C3> 275 typename C3>
269 inline R DispatchToFunction(Function function, 276 inline R DispatchToFunction(Function function,
270 const Tuple<P1>& p, 277 const base::Tuple<P1>& p,
271 const Tuple<C1, C2, C3>& c) { 278 const base::Tuple<C1, C2, C3>& c) {
272 return (*function)(get<0>(p), get<0>(c), get<1>(c), get<2>(c)); 279 return (*function)(base::get<0>(p), base::get<0>(c), base::get<1>(c),
280 base::get<2>(c));
273 } 281 }
274 282
275 // 1 - 4 283 // 1 - 4
276 template <typename R, typename T, typename Method, typename P1, typename C1, 284 template <typename R, typename T, typename Method, typename P1, typename C1,
277 typename C2, typename C3, typename C4> 285 typename C2, typename C3, typename C4>
278 inline R DispatchToMethod(T* obj, Method method, 286 inline R DispatchToMethod(T* obj, Method method,
279 const Tuple<P1>& p, 287 const base::Tuple<P1>& p,
280 const Tuple<C1, C2, C3, C4>& c) { 288 const base::Tuple<C1, C2, C3, C4>& c) {
281 return (obj->*method)(get<0>(p), get<0>(c), get<1>(c), get<2>(c), get<3>(c)); 289 return (obj->*method)(base::get<0>(p), base::get<0>(c), base::get<1>(c),
290 base::get<2>(c), base::get<3>(c));
282 } 291 }
283 template <typename R, typename Function, typename P1, typename C1, typename C2, 292 template <typename R, typename Function, typename P1, typename C1, typename C2,
284 typename C3, typename C4> 293 typename C3, typename C4>
285 inline R DispatchToFunction(Function function, 294 inline R DispatchToFunction(Function function,
286 const Tuple<P1>& p, 295 const base::Tuple<P1>& p,
287 const Tuple<C1, C2, C3, C4>& c) { 296 const base::Tuple<C1, C2, C3, C4>& c) {
288 return (*function)(get<0>(p), get<0>(c), get<1>(c), get<2>(c), get<3>(c)); 297 return (*function)(base::get<0>(p), base::get<0>(c), base::get<1>(c),
298 base::get<2>(c), base::get<3>(c));
289 } 299 }
290 300
291 // 1 - 5 301 // 1 - 5
292 template <typename R, typename T, typename Method, typename P1, typename C1, 302 template <typename R, typename T, typename Method, typename P1, typename C1,
293 typename C2, typename C3, typename C4, typename C5> 303 typename C2, typename C3, typename C4, typename C5>
294 inline R DispatchToMethod(T* obj, Method method, 304 inline R DispatchToMethod(T* obj, Method method,
295 const Tuple<P1>& p, 305 const base::Tuple<P1>& p,
296 const Tuple<C1, C2, C3, C4, C5>& c) { 306 const base::Tuple<C1, C2, C3, C4, C5>& c) {
297 return (obj->*method)(get<0>(p), get<0>(c), get<1>(c), get<2>(c), get<3>(c), g et<4>(c)); 307 return (obj->*method)(base::get<0>(p), base::get<0>(c), base::get<1>(c),
308 base::get<2>(c), base::get<3>(c), base::get<4>(c));
298 } 309 }
299 template <typename R, typename Function, typename P1, typename C1, typename C2, 310 template <typename R, typename Function, typename P1, typename C1, typename C2,
300 typename C3, typename C4, typename C5> 311 typename C3, typename C4, typename C5>
301 inline R DispatchToFunction(Function function, 312 inline R DispatchToFunction(Function function,
302 const Tuple<P1>& p, 313 const base::Tuple<P1>& p,
303 const Tuple<C1, C2, C3, C4, C5>& c) { 314 const base::Tuple<C1, C2, C3, C4, C5>& c) {
304 return (*function)(get<0>(p), get<0>(c), get<1>(c), get<2>(c), get<3>(c), get< 4>(c)); 315 return (*function)(base::get<0>(p), base::get<0>(c), base::get<1>(c),
316 base::get<2>(c), base::get<3>(c), base::get<4>(c));
305 } 317 }
306 318
307 // 1 - 6 319 // 1 - 6
308 template <typename R, typename T, typename Method, typename P1, typename C1, 320 template <typename R, typename T, typename Method, typename P1, typename C1,
309 typename C2, typename C3, typename C4, typename C5, typename C6> 321 typename C2, typename C3, typename C4, typename C5, typename C6>
310 inline R DispatchToMethod(T* obj, Method method, 322 inline R DispatchToMethod(T* obj, Method method,
311 const Tuple<P1>& p, 323 const base::Tuple<P1>& p,
312 const Tuple<C1, C2, C3, C4, C5, C6>& c) { 324 const base::Tuple<C1, C2, C3, C4, C5, C6>& c) {
313 return (obj->*method)(get<0>(p), get<0>(c), get<1>(c), get<2>(c), get<3>(c), g et<4>(c), get<5>(c)); 325 return (obj->*method)(base::get<0>(p), base::get<0>(c), base::get<1>(c),
326 base::get<2>(c), base::get<3>(c), base::get<4>(c), base::get<5>(c));
314 } 327 }
315 template <typename R, typename Function, typename P1, typename C1, typename C2, 328 template <typename R, typename Function, typename P1, typename C1, typename C2,
316 typename C3, typename C4, typename C5, typename C6> 329 typename C3, typename C4, typename C5, typename C6>
317 inline R DispatchToFunction(Function function, 330 inline R DispatchToFunction(Function function,
318 const Tuple<P1>& p, 331 const base::Tuple<P1>& p,
319 const Tuple<C1, C2, C3, C4, C5, C6>& c) { 332 const base::Tuple<C1, C2, C3, C4, C5, C6>& c) {
320 return (*function)(get<0>(p), get<0>(c), get<1>(c), get<2>(c), get<3>(c), get< 4>(c), get<5>(c)); 333 return (*function)(base::get<0>(p), base::get<0>(c), base::get<1>(c),
334 base::get<2>(c), base::get<3>(c), base::get<4>(c), base::get<5>(c));
321 } 335 }
322 336
323 // 2 - 0 337 // 2 - 0
324 template <typename R, typename T, typename Method, typename P1, typename P2> 338 template <typename R, typename T, typename Method, typename P1, typename P2>
325 inline R DispatchToMethod(T* obj, Method method, 339 inline R DispatchToMethod(T* obj, Method method,
326 const Tuple<P1, P2>& p, 340 const base::Tuple<P1, P2>& p,
327 const Tuple<>& c) { 341 const base::Tuple<>& c) {
328 return (obj->*method)(get<0>(p), get<1>(p)); 342 return (obj->*method)(base::get<0>(p), base::get<1>(p));
329 } 343 }
330 template <typename R, typename Function, typename P1, typename P2> 344 template <typename R, typename Function, typename P1, typename P2>
331 inline R DispatchToFunction(Function function, 345 inline R DispatchToFunction(Function function,
332 const Tuple<P1, P2>& p, 346 const base::Tuple<P1, P2>& p,
333 const Tuple<>& c) { 347 const base::Tuple<>& c) {
334 return (*function)(get<0>(p), get<1>(p)); 348 return (*function)(base::get<0>(p), base::get<1>(p));
335 } 349 }
336 350
337 // 2 - 1 351 // 2 - 1
338 template <typename R, typename T, typename Method, typename P1, typename P2, 352 template <typename R, typename T, typename Method, typename P1, typename P2,
339 typename C1> 353 typename C1>
340 inline R DispatchToMethod(T* obj, Method method, 354 inline R DispatchToMethod(T* obj, Method method,
341 const Tuple<P1, P2>& p, 355 const base::Tuple<P1, P2>& p,
342 const Tuple<C1>& c) { 356 const base::Tuple<C1>& c) {
343 return (obj->*method)(get<0>(p), get<1>(p), get<0>(c)); 357 return (obj->*method)(base::get<0>(p), base::get<1>(p), base::get<0>(c));
344 } 358 }
345 template <typename R, typename Function, typename P1, typename P2, typename C1> 359 template <typename R, typename Function, typename P1, typename P2, typename C1>
346 inline R DispatchToFunction(Function function, 360 inline R DispatchToFunction(Function function,
347 const Tuple<P1, P2>& p, 361 const base::Tuple<P1, P2>& p,
348 const Tuple<C1>& c) { 362 const base::Tuple<C1>& c) {
349 return (*function)(get<0>(p), get<1>(p), get<0>(c)); 363 return (*function)(base::get<0>(p), base::get<1>(p), base::get<0>(c));
350 } 364 }
351 365
352 // 2 - 2 366 // 2 - 2
353 template <typename R, typename T, typename Method, typename P1, typename P2, 367 template <typename R, typename T, typename Method, typename P1, typename P2,
354 typename C1, typename C2> 368 typename C1, typename C2>
355 inline R DispatchToMethod(T* obj, Method method, 369 inline R DispatchToMethod(T* obj, Method method,
356 const Tuple<P1, P2>& p, 370 const base::Tuple<P1, P2>& p,
357 const Tuple<C1, C2>& c) { 371 const base::Tuple<C1, C2>& c) {
358 return (obj->*method)(get<0>(p), get<1>(p), get<0>(c), get<1>(c)); 372 return (obj->*method)(base::get<0>(p), base::get<1>(p), base::get<0>(c),
373 base::get<1>(c));
359 } 374 }
360 template <typename R, typename Function, typename P1, typename P2, typename C1, 375 template <typename R, typename Function, typename P1, typename P2, typename C1,
361 typename C2> 376 typename C2>
362 inline R DispatchToFunction(Function function, 377 inline R DispatchToFunction(Function function,
363 const Tuple<P1, P2>& p, 378 const base::Tuple<P1, P2>& p,
364 const Tuple<C1, C2>& c) { 379 const base::Tuple<C1, C2>& c) {
365 return (*function)(get<0>(p), get<1>(p), get<0>(c), get<1>(c)); 380 return (*function)(base::get<0>(p), base::get<1>(p), base::get<0>(c),
381 base::get<1>(c));
366 } 382 }
367 383
368 // 2 - 3 384 // 2 - 3
369 template <typename R, typename T, typename Method, typename P1, typename P2, 385 template <typename R, typename T, typename Method, typename P1, typename P2,
370 typename C1, typename C2, typename C3> 386 typename C1, typename C2, typename C3>
371 inline R DispatchToMethod(T* obj, Method method, 387 inline R DispatchToMethod(T* obj, Method method,
372 const Tuple<P1, P2>& p, 388 const base::Tuple<P1, P2>& p,
373 const Tuple<C1, C2, C3>& c) { 389 const base::Tuple<C1, C2, C3>& c) {
374 return (obj->*method)(get<0>(p), get<1>(p), get<0>(c), get<1>(c), get<2>(c)); 390 return (obj->*method)(base::get<0>(p), base::get<1>(p), base::get<0>(c),
391 base::get<1>(c), base::get<2>(c));
375 } 392 }
376 template <typename R, typename Function, typename P1, typename P2, typename C1, 393 template <typename R, typename Function, typename P1, typename P2, typename C1,
377 typename C2, typename C3> 394 typename C2, typename C3>
378 inline R DispatchToFunction(Function function, 395 inline R DispatchToFunction(Function function,
379 const Tuple<P1, P2>& p, 396 const base::Tuple<P1, P2>& p,
380 const Tuple<C1, C2, C3>& c) { 397 const base::Tuple<C1, C2, C3>& c) {
381 return (*function)(get<0>(p), get<1>(p), get<0>(c), get<1>(c), get<2>(c)); 398 return (*function)(base::get<0>(p), base::get<1>(p), base::get<0>(c),
399 base::get<1>(c), base::get<2>(c));
382 } 400 }
383 401
384 // 2 - 4 402 // 2 - 4
385 template <typename R, typename T, typename Method, typename P1, typename P2, 403 template <typename R, typename T, typename Method, typename P1, typename P2,
386 typename C1, typename C2, typename C3, typename C4> 404 typename C1, typename C2, typename C3, typename C4>
387 inline R DispatchToMethod(T* obj, Method method, 405 inline R DispatchToMethod(T* obj, Method method,
388 const Tuple<P1, P2>& p, 406 const base::Tuple<P1, P2>& p,
389 const Tuple<C1, C2, C3, C4>& c) { 407 const base::Tuple<C1, C2, C3, C4>& c) {
390 return (obj->*method)(get<0>(p), get<1>(p), get<0>(c), get<1>(c), get<2>(c), g et<3>(c)); 408 return (obj->*method)(base::get<0>(p), base::get<1>(p), base::get<0>(c),
409 base::get<1>(c), base::get<2>(c), base::get<3>(c));
391 } 410 }
392 template <typename R, typename Function, typename P1, typename P2, typename C1, 411 template <typename R, typename Function, typename P1, typename P2, typename C1,
393 typename C2, typename C3, typename C4> 412 typename C2, typename C3, typename C4>
394 inline R DispatchToFunction(Function function, 413 inline R DispatchToFunction(Function function,
395 const Tuple<P1, P2>& p, 414 const base::Tuple<P1, P2>& p,
396 const Tuple<C1, C2, C3, C4>& c) { 415 const base::Tuple<C1, C2, C3, C4>& c) {
397 return (*function)(get<0>(p), get<1>(p), get<0>(c), get<1>(c), get<2>(c), get< 3>(c)); 416 return (*function)(base::get<0>(p), base::get<1>(p), base::get<0>(c),
417 base::get<1>(c), base::get<2>(c), base::get<3>(c));
398 } 418 }
399 419
400 // 2 - 5 420 // 2 - 5
401 template <typename R, typename T, typename Method, typename P1, typename P2, 421 template <typename R, typename T, typename Method, typename P1, typename P2,
402 typename C1, typename C2, typename C3, typename C4, typename C5> 422 typename C1, typename C2, typename C3, typename C4, typename C5>
403 inline R DispatchToMethod(T* obj, Method method, 423 inline R DispatchToMethod(T* obj, Method method,
404 const Tuple<P1, P2>& p, 424 const base::Tuple<P1, P2>& p,
405 const Tuple<C1, C2, C3, C4, C5>& c) { 425 const base::Tuple<C1, C2, C3, C4, C5>& c) {
406 return (obj->*method)(get<0>(p), get<1>(p), get<0>(c), get<1>(c), get<2>(c), g et<3>(c), get<4>(c)); 426 return (obj->*method)(base::get<0>(p), base::get<1>(p), base::get<0>(c),
427 base::get<1>(c), base::get<2>(c), base::get<3>(c), base::get<4>(c));
407 } 428 }
408 template <typename R, typename Function, typename P1, typename P2, typename C1, 429 template <typename R, typename Function, typename P1, typename P2, typename C1,
409 typename C2, typename C3, typename C4, typename C5> 430 typename C2, typename C3, typename C4, typename C5>
410 inline R DispatchToFunction(Function function, 431 inline R DispatchToFunction(Function function,
411 const Tuple<P1, P2>& p, 432 const base::Tuple<P1, P2>& p,
412 const Tuple<C1, C2, C3, C4, C5>& c) { 433 const base::Tuple<C1, C2, C3, C4, C5>& c) {
413 return (*function)(get<0>(p), get<1>(p), get<0>(c), get<1>(c), get<2>(c), get< 3>(c), get<4>(c)); 434 return (*function)(base::get<0>(p), base::get<1>(p), base::get<0>(c),
435 base::get<1>(c), base::get<2>(c), base::get<3>(c), base::get<4>(c));
414 } 436 }
415 437
416 // 2 - 6 438 // 2 - 6
417 template <typename R, typename T, typename Method, typename P1, typename P2, 439 template <typename R, typename T, typename Method, typename P1, typename P2,
418 typename C1, typename C2, typename C3, typename C4, typename C5, 440 typename C1, typename C2, typename C3, typename C4, typename C5,
419 typename C6> 441 typename C6>
420 inline R DispatchToMethod(T* obj, Method method, 442 inline R DispatchToMethod(T* obj, Method method,
421 const Tuple<P1, P2>& p, 443 const base::Tuple<P1, P2>& p,
422 const Tuple<C1, C2, C3, C4, C5, C6>& c) { 444 const base::Tuple<C1, C2, C3, C4, C5, C6>& c) {
423 return (obj->*method)(get<0>(p), get<1>(p), get<0>(c), get<1>(c), get<2>(c), g et<3>(c), get<4>(c), get<5>(c)); 445 return (obj->*method)(base::get<0>(p), base::get<1>(p), base::get<0>(c),
446 base::get<1>(c), base::get<2>(c), base::get<3>(c), base::get<4>(c),
447 base::get<5>(c));
424 } 448 }
425 template <typename R, typename Function, typename P1, typename P2, typename C1, 449 template <typename R, typename Function, typename P1, typename P2, typename C1,
426 typename C2, typename C3, typename C4, typename C5, typename C6> 450 typename C2, typename C3, typename C4, typename C5, typename C6>
427 inline R DispatchToFunction(Function function, 451 inline R DispatchToFunction(Function function,
428 const Tuple<P1, P2>& p, 452 const base::Tuple<P1, P2>& p,
429 const Tuple<C1, C2, C3, C4, C5, C6>& c) { 453 const base::Tuple<C1, C2, C3, C4, C5, C6>& c) {
430 return (*function)(get<0>(p), get<1>(p), get<0>(c), get<1>(c), get<2>(c), get< 3>(c), get<4>(c), get<5>(c)); 454 return (*function)(base::get<0>(p), base::get<1>(p), base::get<0>(c),
455 base::get<1>(c), base::get<2>(c), base::get<3>(c), base::get<4>(c),
456 base::get<5>(c));
431 } 457 }
432 458
433 // 3 - 0 459 // 3 - 0
434 template <typename R, typename T, typename Method, typename P1, typename P2, 460 template <typename R, typename T, typename Method, typename P1, typename P2,
435 typename P3> 461 typename P3>
436 inline R DispatchToMethod(T* obj, Method method, 462 inline R DispatchToMethod(T* obj, Method method,
437 const Tuple<P1, P2, P3>& p, 463 const base::Tuple<P1, P2, P3>& p,
438 const Tuple<>& c) { 464 const base::Tuple<>& c) {
439 return (obj->*method)(get<0>(p), get<1>(p), get<2>(p)); 465 return (obj->*method)(base::get<0>(p), base::get<1>(p), base::get<2>(p));
440 } 466 }
441 template <typename R, typename Function, typename P1, typename P2, typename P3> 467 template <typename R, typename Function, typename P1, typename P2, typename P3>
442 inline R DispatchToFunction(Function function, 468 inline R DispatchToFunction(Function function,
443 const Tuple<P1, P2, P3>& p, 469 const base::Tuple<P1, P2, P3>& p,
444 const Tuple<>& c) { 470 const base::Tuple<>& c) {
445 return (*function)(get<0>(p), get<1>(p), get<2>(p)); 471 return (*function)(base::get<0>(p), base::get<1>(p), base::get<2>(p));
446 } 472 }
447 473
448 // 3 - 1 474 // 3 - 1
449 template <typename R, typename T, typename Method, typename P1, typename P2, 475 template <typename R, typename T, typename Method, typename P1, typename P2,
450 typename P3, typename C1> 476 typename P3, typename C1>
451 inline R DispatchToMethod(T* obj, Method method, 477 inline R DispatchToMethod(T* obj, Method method,
452 const Tuple<P1, P2, P3>& p, 478 const base::Tuple<P1, P2, P3>& p,
453 const Tuple<C1>& c) { 479 const base::Tuple<C1>& c) {
454 return (obj->*method)(get<0>(p), get<1>(p), get<2>(p), get<0>(c)); 480 return (obj->*method)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
481 base::get<0>(c));
455 } 482 }
456 template <typename R, typename Function, typename P1, typename P2, typename P3, 483 template <typename R, typename Function, typename P1, typename P2, typename P3,
457 typename C1> 484 typename C1>
458 inline R DispatchToFunction(Function function, 485 inline R DispatchToFunction(Function function,
459 const Tuple<P1, P2, P3>& p, 486 const base::Tuple<P1, P2, P3>& p,
460 const Tuple<C1>& c) { 487 const base::Tuple<C1>& c) {
461 return (*function)(get<0>(p), get<1>(p), get<2>(p), get<0>(c)); 488 return (*function)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
489 base::get<0>(c));
462 } 490 }
463 491
464 // 3 - 2 492 // 3 - 2
465 template <typename R, typename T, typename Method, typename P1, typename P2, 493 template <typename R, typename T, typename Method, typename P1, typename P2,
466 typename P3, typename C1, typename C2> 494 typename P3, typename C1, typename C2>
467 inline R DispatchToMethod(T* obj, Method method, 495 inline R DispatchToMethod(T* obj, Method method,
468 const Tuple<P1, P2, P3>& p, 496 const base::Tuple<P1, P2, P3>& p,
469 const Tuple<C1, C2>& c) { 497 const base::Tuple<C1, C2>& c) {
470 return (obj->*method)(get<0>(p), get<1>(p), get<2>(p), get<0>(c), get<1>(c)); 498 return (obj->*method)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
499 base::get<0>(c), base::get<1>(c));
471 } 500 }
472 template <typename R, typename Function, typename P1, typename P2, typename P3, 501 template <typename R, typename Function, typename P1, typename P2, typename P3,
473 typename C1, typename C2> 502 typename C1, typename C2>
474 inline R DispatchToFunction(Function function, 503 inline R DispatchToFunction(Function function,
475 const Tuple<P1, P2, P3>& p, 504 const base::Tuple<P1, P2, P3>& p,
476 const Tuple<C1, C2>& c) { 505 const base::Tuple<C1, C2>& c) {
477 return (*function)(get<0>(p), get<1>(p), get<2>(p), get<0>(c), get<1>(c)); 506 return (*function)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
507 base::get<0>(c), base::get<1>(c));
478 } 508 }
479 509
480 // 3 - 3 510 // 3 - 3
481 template <typename R, typename T, typename Method, typename P1, typename P2, 511 template <typename R, typename T, typename Method, typename P1, typename P2,
482 typename P3, typename C1, typename C2, typename C3> 512 typename P3, typename C1, typename C2, typename C3>
483 inline R DispatchToMethod(T* obj, Method method, 513 inline R DispatchToMethod(T* obj, Method method,
484 const Tuple<P1, P2, P3>& p, 514 const base::Tuple<P1, P2, P3>& p,
485 const Tuple<C1, C2, C3>& c) { 515 const base::Tuple<C1, C2, C3>& c) {
486 return (obj->*method)(get<0>(p), get<1>(p), get<2>(p), get<0>(c), get<1>(c), g et<2>(c)); 516 return (obj->*method)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
517 base::get<0>(c), base::get<1>(c), base::get<2>(c));
487 } 518 }
488 template <typename R, typename Function, typename P1, typename P2, typename P3, 519 template <typename R, typename Function, typename P1, typename P2, typename P3,
489 typename C1, typename C2, typename C3> 520 typename C1, typename C2, typename C3>
490 inline R DispatchToFunction(Function function, 521 inline R DispatchToFunction(Function function,
491 const Tuple<P1, P2, P3>& p, 522 const base::Tuple<P1, P2, P3>& p,
492 const Tuple<C1, C2, C3>& c) { 523 const base::Tuple<C1, C2, C3>& c) {
493 return (*function)(get<0>(p), get<1>(p), get<2>(p), get<0>(c), get<1>(c), get< 2>(c)); 524 return (*function)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
525 base::get<0>(c), base::get<1>(c), base::get<2>(c));
494 } 526 }
495 527
496 // 3 - 4 528 // 3 - 4
497 template <typename R, typename T, typename Method, typename P1, typename P2, 529 template <typename R, typename T, typename Method, typename P1, typename P2,
498 typename P3, typename C1, typename C2, typename C3, typename C4> 530 typename P3, typename C1, typename C2, typename C3, typename C4>
499 inline R DispatchToMethod(T* obj, Method method, 531 inline R DispatchToMethod(T* obj, Method method,
500 const Tuple<P1, P2, P3>& p, 532 const base::Tuple<P1, P2, P3>& p,
501 const Tuple<C1, C2, C3, C4>& c) { 533 const base::Tuple<C1, C2, C3, C4>& c) {
502 return (obj->*method)(get<0>(p), get<1>(p), get<2>(p), get<0>(c), get<1>(c), g et<2>(c), get<3>(c)); 534 return (obj->*method)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
535 base::get<0>(c), base::get<1>(c), base::get<2>(c), base::get<3>(c));
503 } 536 }
504 template <typename R, typename Function, typename P1, typename P2, typename P3, 537 template <typename R, typename Function, typename P1, typename P2, typename P3,
505 typename C1, typename C2, typename C3, typename C4> 538 typename C1, typename C2, typename C3, typename C4>
506 inline R DispatchToFunction(Function function, 539 inline R DispatchToFunction(Function function,
507 const Tuple<P1, P2, P3>& p, 540 const base::Tuple<P1, P2, P3>& p,
508 const Tuple<C1, C2, C3, C4>& c) { 541 const base::Tuple<C1, C2, C3, C4>& c) {
509 return (*function)(get<0>(p), get<1>(p), get<2>(p), get<0>(c), get<1>(c), get< 2>(c), get<3>(c)); 542 return (*function)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
543 base::get<0>(c), base::get<1>(c), base::get<2>(c), base::get<3>(c));
510 } 544 }
511 545
512 // 3 - 5 546 // 3 - 5
513 template <typename R, typename T, typename Method, typename P1, typename P2, 547 template <typename R, typename T, typename Method, typename P1, typename P2,
514 typename P3, typename C1, typename C2, typename C3, typename C4, 548 typename P3, typename C1, typename C2, typename C3, typename C4,
515 typename C5> 549 typename C5>
516 inline R DispatchToMethod(T* obj, Method method, 550 inline R DispatchToMethod(T* obj, Method method,
517 const Tuple<P1, P2, P3>& p, 551 const base::Tuple<P1, P2, P3>& p,
518 const Tuple<C1, C2, C3, C4, C5>& c) { 552 const base::Tuple<C1, C2, C3, C4, C5>& c) {
519 return (obj->*method)(get<0>(p), get<1>(p), get<2>(p), get<0>(c), get<1>(c), g et<2>(c), get<3>(c), get<4>(c)); 553 return (obj->*method)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
554 base::get<0>(c), base::get<1>(c), base::get<2>(c), base::get<3>(c),
555 base::get<4>(c));
520 } 556 }
521 template <typename R, typename Function, typename P1, typename P2, typename P3, 557 template <typename R, typename Function, typename P1, typename P2, typename P3,
522 typename C1, typename C2, typename C3, typename C4, typename C5> 558 typename C1, typename C2, typename C3, typename C4, typename C5>
523 inline R DispatchToFunction(Function function, 559 inline R DispatchToFunction(Function function,
524 const Tuple<P1, P2, P3>& p, 560 const base::Tuple<P1, P2, P3>& p,
525 const Tuple<C1, C2, C3, C4, C5>& c) { 561 const base::Tuple<C1, C2, C3, C4, C5>& c) {
526 return (*function)(get<0>(p), get<1>(p), get<2>(p), get<0>(c), get<1>(c), get< 2>(c), get<3>(c), get<4>(c)); 562 return (*function)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
563 base::get<0>(c), base::get<1>(c), base::get<2>(c), base::get<3>(c),
564 base::get<4>(c));
527 } 565 }
528 566
529 // 3 - 6 567 // 3 - 6
530 template <typename R, typename T, typename Method, typename P1, typename P2, 568 template <typename R, typename T, typename Method, typename P1, typename P2,
531 typename P3, typename C1, typename C2, typename C3, typename C4, 569 typename P3, typename C1, typename C2, typename C3, typename C4,
532 typename C5, typename C6> 570 typename C5, typename C6>
533 inline R DispatchToMethod(T* obj, Method method, 571 inline R DispatchToMethod(T* obj, Method method,
534 const Tuple<P1, P2, P3>& p, 572 const base::Tuple<P1, P2, P3>& p,
535 const Tuple<C1, C2, C3, C4, C5, C6>& c) { 573 const base::Tuple<C1, C2, C3, C4, C5, C6>& c) {
536 return (obj->*method)(get<0>(p), get<1>(p), get<2>(p), get<0>(c), get<1>(c), g et<2>(c), get<3>(c), get<4>(c), get<5>(c)); 574 return (obj->*method)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
575 base::get<0>(c), base::get<1>(c), base::get<2>(c), base::get<3>(c),
576 base::get<4>(c), base::get<5>(c));
537 } 577 }
538 template <typename R, typename Function, typename P1, typename P2, typename P3, 578 template <typename R, typename Function, typename P1, typename P2, typename P3,
539 typename C1, typename C2, typename C3, typename C4, typename C5, 579 typename C1, typename C2, typename C3, typename C4, typename C5,
540 typename C6> 580 typename C6>
541 inline R DispatchToFunction(Function function, 581 inline R DispatchToFunction(Function function,
542 const Tuple<P1, P2, P3>& p, 582 const base::Tuple<P1, P2, P3>& p,
543 const Tuple<C1, C2, C3, C4, C5, C6>& c) { 583 const base::Tuple<C1, C2, C3, C4, C5, C6>& c) {
544 return (*function)(get<0>(p), get<1>(p), get<2>(p), get<0>(c), get<1>(c), get< 2>(c), get<3>(c), get<4>(c), get<5>(c)); 584 return (*function)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
585 base::get<0>(c), base::get<1>(c), base::get<2>(c), base::get<3>(c),
586 base::get<4>(c), base::get<5>(c));
545 } 587 }
546 588
547 // 4 - 0 589 // 4 - 0
548 template <typename R, typename T, typename Method, typename P1, typename P2, 590 template <typename R, typename T, typename Method, typename P1, typename P2,
549 typename P3, typename P4> 591 typename P3, typename P4>
550 inline R DispatchToMethod(T* obj, Method method, 592 inline R DispatchToMethod(T* obj, Method method,
551 const Tuple<P1, P2, P3, P4>& p, 593 const base::Tuple<P1, P2, P3, P4>& p,
552 const Tuple<>& c) { 594 const base::Tuple<>& c) {
553 return (obj->*method)(get<0>(p), get<1>(p), get<2>(p), get<3>(p)); 595 return (obj->*method)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
596 base::get<3>(p));
554 } 597 }
555 template <typename R, typename Function, typename P1, typename P2, typename P3, 598 template <typename R, typename Function, typename P1, typename P2, typename P3,
556 typename P4> 599 typename P4>
557 inline R DispatchToFunction(Function function, 600 inline R DispatchToFunction(Function function,
558 const Tuple<P1, P2, P3, P4>& p, 601 const base::Tuple<P1, P2, P3, P4>& p,
559 const Tuple<>& c) { 602 const base::Tuple<>& c) {
560 return (*function)(get<0>(p), get<1>(p), get<2>(p), get<3>(p)); 603 return (*function)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
604 base::get<3>(p));
561 } 605 }
562 606
563 // 4 - 1 607 // 4 - 1
564 template <typename R, typename T, typename Method, typename P1, typename P2, 608 template <typename R, typename T, typename Method, typename P1, typename P2,
565 typename P3, typename P4, typename C1> 609 typename P3, typename P4, typename C1>
566 inline R DispatchToMethod(T* obj, Method method, 610 inline R DispatchToMethod(T* obj, Method method,
567 const Tuple<P1, P2, P3, P4>& p, 611 const base::Tuple<P1, P2, P3, P4>& p,
568 const Tuple<C1>& c) { 612 const base::Tuple<C1>& c) {
569 return (obj->*method)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<0>(c)); 613 return (obj->*method)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
614 base::get<3>(p), base::get<0>(c));
570 } 615 }
571 template <typename R, typename Function, typename P1, typename P2, typename P3, 616 template <typename R, typename Function, typename P1, typename P2, typename P3,
572 typename P4, typename C1> 617 typename P4, typename C1>
573 inline R DispatchToFunction(Function function, 618 inline R DispatchToFunction(Function function,
574 const Tuple<P1, P2, P3, P4>& p, 619 const base::Tuple<P1, P2, P3, P4>& p,
575 const Tuple<C1>& c) { 620 const base::Tuple<C1>& c) {
576 return (*function)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<0>(c)); 621 return (*function)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
622 base::get<3>(p), base::get<0>(c));
577 } 623 }
578 624
579 // 4 - 2 625 // 4 - 2
580 template <typename R, typename T, typename Method, typename P1, typename P2, 626 template <typename R, typename T, typename Method, typename P1, typename P2,
581 typename P3, typename P4, typename C1, typename C2> 627 typename P3, typename P4, typename C1, typename C2>
582 inline R DispatchToMethod(T* obj, Method method, 628 inline R DispatchToMethod(T* obj, Method method,
583 const Tuple<P1, P2, P3, P4>& p, 629 const base::Tuple<P1, P2, P3, P4>& p,
584 const Tuple<C1, C2>& c) { 630 const base::Tuple<C1, C2>& c) {
585 return (obj->*method)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<0>(c), g et<1>(c)); 631 return (obj->*method)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
632 base::get<3>(p), base::get<0>(c), base::get<1>(c));
586 } 633 }
587 template <typename R, typename Function, typename P1, typename P2, typename P3, 634 template <typename R, typename Function, typename P1, typename P2, typename P3,
588 typename P4, typename C1, typename C2> 635 typename P4, typename C1, typename C2>
589 inline R DispatchToFunction(Function function, 636 inline R DispatchToFunction(Function function,
590 const Tuple<P1, P2, P3, P4>& p, 637 const base::Tuple<P1, P2, P3, P4>& p,
591 const Tuple<C1, C2>& c) { 638 const base::Tuple<C1, C2>& c) {
592 return (*function)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<0>(c), get< 1>(c)); 639 return (*function)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
640 base::get<3>(p), base::get<0>(c), base::get<1>(c));
593 } 641 }
594 642
595 // 4 - 3 643 // 4 - 3
596 template <typename R, typename T, typename Method, typename P1, typename P2, 644 template <typename R, typename T, typename Method, typename P1, typename P2,
597 typename P3, typename P4, typename C1, typename C2, typename C3> 645 typename P3, typename P4, typename C1, typename C2, typename C3>
598 inline R DispatchToMethod(T* obj, Method method, 646 inline R DispatchToMethod(T* obj, Method method,
599 const Tuple<P1, P2, P3, P4>& p, 647 const base::Tuple<P1, P2, P3, P4>& p,
600 const Tuple<C1, C2, C3>& c) { 648 const base::Tuple<C1, C2, C3>& c) {
601 return (obj->*method)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<0>(c), g et<1>(c), get<2>(c)); 649 return (obj->*method)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
650 base::get<3>(p), base::get<0>(c), base::get<1>(c), base::get<2>(c));
602 } 651 }
603 template <typename R, typename Function, typename P1, typename P2, typename P3, 652 template <typename R, typename Function, typename P1, typename P2, typename P3,
604 typename P4, typename C1, typename C2, typename C3> 653 typename P4, typename C1, typename C2, typename C3>
605 inline R DispatchToFunction(Function function, 654 inline R DispatchToFunction(Function function,
606 const Tuple<P1, P2, P3, P4>& p, 655 const base::Tuple<P1, P2, P3, P4>& p,
607 const Tuple<C1, C2, C3>& c) { 656 const base::Tuple<C1, C2, C3>& c) {
608 return (*function)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<0>(c), get< 1>(c), get<2>(c)); 657 return (*function)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
658 base::get<3>(p), base::get<0>(c), base::get<1>(c), base::get<2>(c));
609 } 659 }
610 660
611 // 4 - 4 661 // 4 - 4
612 template <typename R, typename T, typename Method, typename P1, typename P2, 662 template <typename R, typename T, typename Method, typename P1, typename P2,
613 typename P3, typename P4, typename C1, typename C2, typename C3, 663 typename P3, typename P4, typename C1, typename C2, typename C3,
614 typename C4> 664 typename C4>
615 inline R DispatchToMethod(T* obj, Method method, 665 inline R DispatchToMethod(T* obj, Method method,
616 const Tuple<P1, P2, P3, P4>& p, 666 const base::Tuple<P1, P2, P3, P4>& p,
617 const Tuple<C1, C2, C3, C4>& c) { 667 const base::Tuple<C1, C2, C3, C4>& c) {
618 return (obj->*method)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<0>(c), g et<1>(c), get<2>(c), get<3>(c)); 668 return (obj->*method)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
669 base::get<3>(p), base::get<0>(c), base::get<1>(c), base::get<2>(c),
670 base::get<3>(c));
619 } 671 }
620 template <typename R, typename Function, typename P1, typename P2, typename P3, 672 template <typename R, typename Function, typename P1, typename P2, typename P3,
621 typename P4, typename C1, typename C2, typename C3, typename C4> 673 typename P4, typename C1, typename C2, typename C3, typename C4>
622 inline R DispatchToFunction(Function function, 674 inline R DispatchToFunction(Function function,
623 const Tuple<P1, P2, P3, P4>& p, 675 const base::Tuple<P1, P2, P3, P4>& p,
624 const Tuple<C1, C2, C3, C4>& c) { 676 const base::Tuple<C1, C2, C3, C4>& c) {
625 return (*function)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<0>(c), get< 1>(c), get<2>(c), get<3>(c)); 677 return (*function)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
678 base::get<3>(p), base::get<0>(c), base::get<1>(c), base::get<2>(c),
679 base::get<3>(c));
626 } 680 }
627 681
628 // 4 - 5 682 // 4 - 5
629 template <typename R, typename T, typename Method, typename P1, typename P2, 683 template <typename R, typename T, typename Method, typename P1, typename P2,
630 typename P3, typename P4, typename C1, typename C2, typename C3, 684 typename P3, typename P4, typename C1, typename C2, typename C3,
631 typename C4, typename C5> 685 typename C4, typename C5>
632 inline R DispatchToMethod(T* obj, Method method, 686 inline R DispatchToMethod(T* obj, Method method,
633 const Tuple<P1, P2, P3, P4>& p, 687 const base::Tuple<P1, P2, P3, P4>& p,
634 const Tuple<C1, C2, C3, C4, C5>& c) { 688 const base::Tuple<C1, C2, C3, C4, C5>& c) {
635 return (obj->*method)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<0>(c), g et<1>(c), get<2>(c), get<3>(c), get<4>(c)); 689 return (obj->*method)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
690 base::get<3>(p), base::get<0>(c), base::get<1>(c), base::get<2>(c),
691 base::get<3>(c), base::get<4>(c));
636 } 692 }
637 template <typename R, typename Function, typename P1, typename P2, typename P3, 693 template <typename R, typename Function, typename P1, typename P2, typename P3,
638 typename P4, typename C1, typename C2, typename C3, typename C4, 694 typename P4, typename C1, typename C2, typename C3, typename C4,
639 typename C5> 695 typename C5>
640 inline R DispatchToFunction(Function function, 696 inline R DispatchToFunction(Function function,
641 const Tuple<P1, P2, P3, P4>& p, 697 const base::Tuple<P1, P2, P3, P4>& p,
642 const Tuple<C1, C2, C3, C4, C5>& c) { 698 const base::Tuple<C1, C2, C3, C4, C5>& c) {
643 return (*function)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<0>(c), get< 1>(c), get<2>(c), get<3>(c), get<4>(c)); 699 return (*function)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
700 base::get<3>(p), base::get<0>(c), base::get<1>(c), base::get<2>(c),
701 base::get<3>(c), base::get<4>(c));
644 } 702 }
645 703
646 // 4 - 6 704 // 4 - 6
647 template <typename R, typename T, typename Method, typename P1, typename P2, 705 template <typename R, typename T, typename Method, typename P1, typename P2,
648 typename P3, typename P4, typename C1, typename C2, typename C3, 706 typename P3, typename P4, typename C1, typename C2, typename C3,
649 typename C4, typename C5, typename C6> 707 typename C4, typename C5, typename C6>
650 inline R DispatchToMethod(T* obj, Method method, 708 inline R DispatchToMethod(T* obj, Method method,
651 const Tuple<P1, P2, P3, P4>& p, 709 const base::Tuple<P1, P2, P3, P4>& p,
652 const Tuple<C1, C2, C3, C4, C5, C6>& c) { 710 const base::Tuple<C1, C2, C3, C4, C5, C6>& c) {
653 return (obj->*method)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<0>(c), g et<1>(c), get<2>(c), get<3>(c), get<4>(c), get<5>(c)); 711 return (obj->*method)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
712 base::get<3>(p), base::get<0>(c), base::get<1>(c), base::get<2>(c),
713 base::get<3>(c), base::get<4>(c), base::get<5>(c));
654 } 714 }
655 template <typename R, typename Function, typename P1, typename P2, typename P3, 715 template <typename R, typename Function, typename P1, typename P2, typename P3,
656 typename P4, typename C1, typename C2, typename C3, typename C4, 716 typename P4, typename C1, typename C2, typename C3, typename C4,
657 typename C5, typename C6> 717 typename C5, typename C6>
658 inline R DispatchToFunction(Function function, 718 inline R DispatchToFunction(Function function,
659 const Tuple<P1, P2, P3, P4>& p, 719 const base::Tuple<P1, P2, P3, P4>& p,
660 const Tuple<C1, C2, C3, C4, C5, C6>& c) { 720 const base::Tuple<C1, C2, C3, C4, C5, C6>& c) {
661 return (*function)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<0>(c), get< 1>(c), get<2>(c), get<3>(c), get<4>(c), get<5>(c)); 721 return (*function)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
722 base::get<3>(p), base::get<0>(c), base::get<1>(c), base::get<2>(c),
723 base::get<3>(c), base::get<4>(c), base::get<5>(c));
662 } 724 }
663 725
664 // 5 - 0 726 // 5 - 0
665 template <typename R, typename T, typename Method, typename P1, typename P2, 727 template <typename R, typename T, typename Method, typename P1, typename P2,
666 typename P3, typename P4, typename P5> 728 typename P3, typename P4, typename P5>
667 inline R DispatchToMethod(T* obj, Method method, 729 inline R DispatchToMethod(T* obj, Method method,
668 const Tuple<P1, P2, P3, P4, P5>& p, 730 const base::Tuple<P1, P2, P3, P4, P5>& p,
669 const Tuple<>& c) { 731 const base::Tuple<>& c) {
670 return (obj->*method)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<4>(p)); 732 return (obj->*method)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
733 base::get<3>(p), base::get<4>(p));
671 } 734 }
672 template <typename R, typename Function, typename P1, typename P2, typename P3, 735 template <typename R, typename Function, typename P1, typename P2, typename P3,
673 typename P4, typename P5> 736 typename P4, typename P5>
674 inline R DispatchToFunction(Function function, 737 inline R DispatchToFunction(Function function,
675 const Tuple<P1, P2, P3, P4, P5>& p, 738 const base::Tuple<P1, P2, P3, P4, P5>& p,
676 const Tuple<>& c) { 739 const base::Tuple<>& c) {
677 return (*function)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<4>(p)); 740 return (*function)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
741 base::get<3>(p), base::get<4>(p));
678 } 742 }
679 743
680 // 5 - 1 744 // 5 - 1
681 template <typename R, typename T, typename Method, typename P1, typename P2, 745 template <typename R, typename T, typename Method, typename P1, typename P2,
682 typename P3, typename P4, typename P5, typename C1> 746 typename P3, typename P4, typename P5, typename C1>
683 inline R DispatchToMethod(T* obj, Method method, 747 inline R DispatchToMethod(T* obj, Method method,
684 const Tuple<P1, P2, P3, P4, P5>& p, 748 const base::Tuple<P1, P2, P3, P4, P5>& p,
685 const Tuple<C1>& c) { 749 const base::Tuple<C1>& c) {
686 return (obj->*method)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<4>(p), g et<0>(c)); 750 return (obj->*method)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
751 base::get<3>(p), base::get<4>(p), base::get<0>(c));
687 } 752 }
688 template <typename R, typename Function, typename P1, typename P2, typename P3, 753 template <typename R, typename Function, typename P1, typename P2, typename P3,
689 typename P4, typename P5, typename C1> 754 typename P4, typename P5, typename C1>
690 inline R DispatchToFunction(Function function, 755 inline R DispatchToFunction(Function function,
691 const Tuple<P1, P2, P3, P4, P5>& p, 756 const base::Tuple<P1, P2, P3, P4, P5>& p,
692 const Tuple<C1>& c) { 757 const base::Tuple<C1>& c) {
693 return (*function)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<4>(p), get< 0>(c)); 758 return (*function)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
759 base::get<3>(p), base::get<4>(p), base::get<0>(c));
694 } 760 }
695 761
696 // 5 - 2 762 // 5 - 2
697 template <typename R, typename T, typename Method, typename P1, typename P2, 763 template <typename R, typename T, typename Method, typename P1, typename P2,
698 typename P3, typename P4, typename P5, typename C1, typename C2> 764 typename P3, typename P4, typename P5, typename C1, typename C2>
699 inline R DispatchToMethod(T* obj, Method method, 765 inline R DispatchToMethod(T* obj, Method method,
700 const Tuple<P1, P2, P3, P4, P5>& p, 766 const base::Tuple<P1, P2, P3, P4, P5>& p,
701 const Tuple<C1, C2>& c) { 767 const base::Tuple<C1, C2>& c) {
702 return (obj->*method)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<4>(p), g et<0>(c), get<1>(c)); 768 return (obj->*method)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
769 base::get<3>(p), base::get<4>(p), base::get<0>(c), base::get<1>(c));
703 } 770 }
704 template <typename R, typename Function, typename P1, typename P2, typename P3, 771 template <typename R, typename Function, typename P1, typename P2, typename P3,
705 typename P4, typename P5, typename C1, typename C2> 772 typename P4, typename P5, typename C1, typename C2>
706 inline R DispatchToFunction(Function function, 773 inline R DispatchToFunction(Function function,
707 const Tuple<P1, P2, P3, P4, P5>& p, 774 const base::Tuple<P1, P2, P3, P4, P5>& p,
708 const Tuple<C1, C2>& c) { 775 const base::Tuple<C1, C2>& c) {
709 return (*function)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<4>(p), get< 0>(c), get<1>(c)); 776 return (*function)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
777 base::get<3>(p), base::get<4>(p), base::get<0>(c), base::get<1>(c));
710 } 778 }
711 779
712 // 5 - 3 780 // 5 - 3
713 template <typename R, typename T, typename Method, typename P1, typename P2, 781 template <typename R, typename T, typename Method, typename P1, typename P2,
714 typename P3, typename P4, typename P5, typename C1, typename C2, 782 typename P3, typename P4, typename P5, typename C1, typename C2,
715 typename C3> 783 typename C3>
716 inline R DispatchToMethod(T* obj, Method method, 784 inline R DispatchToMethod(T* obj, Method method,
717 const Tuple<P1, P2, P3, P4, P5>& p, 785 const base::Tuple<P1, P2, P3, P4, P5>& p,
718 const Tuple<C1, C2, C3>& c) { 786 const base::Tuple<C1, C2, C3>& c) {
719 return (obj->*method)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<4>(p), g et<0>(c), get<1>(c), get<2>(c)); 787 return (obj->*method)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
788 base::get<3>(p), base::get<4>(p), base::get<0>(c), base::get<1>(c),
789 base::get<2>(c));
720 } 790 }
721 template <typename R, typename Function, typename P1, typename P2, typename P3, 791 template <typename R, typename Function, typename P1, typename P2, typename P3,
722 typename P4, typename P5, typename C1, typename C2, typename C3> 792 typename P4, typename P5, typename C1, typename C2, typename C3>
723 inline R DispatchToFunction(Function function, 793 inline R DispatchToFunction(Function function,
724 const Tuple<P1, P2, P3, P4, P5>& p, 794 const base::Tuple<P1, P2, P3, P4, P5>& p,
725 const Tuple<C1, C2, C3>& c) { 795 const base::Tuple<C1, C2, C3>& c) {
726 return (*function)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<4>(p), get< 0>(c), get<1>(c), get<2>(c)); 796 return (*function)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
797 base::get<3>(p), base::get<4>(p), base::get<0>(c), base::get<1>(c),
798 base::get<2>(c));
727 } 799 }
728 800
729 // 5 - 4 801 // 5 - 4
730 template <typename R, typename T, typename Method, typename P1, typename P2, 802 template <typename R, typename T, typename Method, typename P1, typename P2,
731 typename P3, typename P4, typename P5, typename C1, typename C2, 803 typename P3, typename P4, typename P5, typename C1, typename C2,
732 typename C3, typename C4> 804 typename C3, typename C4>
733 inline R DispatchToMethod(T* obj, Method method, 805 inline R DispatchToMethod(T* obj, Method method,
734 const Tuple<P1, P2, P3, P4, P5>& p, 806 const base::Tuple<P1, P2, P3, P4, P5>& p,
735 const Tuple<C1, C2, C3, C4>& c) { 807 const base::Tuple<C1, C2, C3, C4>& c) {
736 return (obj->*method)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<4>(p), g et<0>(c), get<1>(c), get<2>(c), get<3>(c)); 808 return (obj->*method)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
809 base::get<3>(p), base::get<4>(p), base::get<0>(c), base::get<1>(c),
810 base::get<2>(c), base::get<3>(c));
737 } 811 }
738 template <typename R, typename Function, typename P1, typename P2, typename P3, 812 template <typename R, typename Function, typename P1, typename P2, typename P3,
739 typename P4, typename P5, typename C1, typename C2, typename C3, 813 typename P4, typename P5, typename C1, typename C2, typename C3,
740 typename C4> 814 typename C4>
741 inline R DispatchToFunction(Function function, 815 inline R DispatchToFunction(Function function,
742 const Tuple<P1, P2, P3, P4, P5>& p, 816 const base::Tuple<P1, P2, P3, P4, P5>& p,
743 const Tuple<C1, C2, C3, C4>& c) { 817 const base::Tuple<C1, C2, C3, C4>& c) {
744 return (*function)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<4>(p), get< 0>(c), get<1>(c), get<2>(c), get<3>(c)); 818 return (*function)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
819 base::get<3>(p), base::get<4>(p), base::get<0>(c), base::get<1>(c),
820 base::get<2>(c), base::get<3>(c));
745 } 821 }
746 822
747 // 5 - 5 823 // 5 - 5
748 template <typename R, typename T, typename Method, typename P1, typename P2, 824 template <typename R, typename T, typename Method, typename P1, typename P2,
749 typename P3, typename P4, typename P5, typename C1, typename C2, 825 typename P3, typename P4, typename P5, typename C1, typename C2,
750 typename C3, typename C4, typename C5> 826 typename C3, typename C4, typename C5>
751 inline R DispatchToMethod(T* obj, Method method, 827 inline R DispatchToMethod(T* obj, Method method,
752 const Tuple<P1, P2, P3, P4, P5>& p, 828 const base::Tuple<P1, P2, P3, P4, P5>& p,
753 const Tuple<C1, C2, C3, C4, C5>& c) { 829 const base::Tuple<C1, C2, C3, C4, C5>& c) {
754 return (obj->*method)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<4>(p), g et<0>(c), get<1>(c), get<2>(c), get<3>(c), get<4>(c)); 830 return (obj->*method)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
831 base::get<3>(p), base::get<4>(p), base::get<0>(c), base::get<1>(c),
832 base::get<2>(c), base::get<3>(c), base::get<4>(c));
755 } 833 }
756 template <typename R, typename Function, typename P1, typename P2, typename P3, 834 template <typename R, typename Function, typename P1, typename P2, typename P3,
757 typename P4, typename P5, typename C1, typename C2, typename C3, 835 typename P4, typename P5, typename C1, typename C2, typename C3,
758 typename C4, typename C5> 836 typename C4, typename C5>
759 inline R DispatchToFunction(Function function, 837 inline R DispatchToFunction(Function function,
760 const Tuple<P1, P2, P3, P4, P5>& p, 838 const base::Tuple<P1, P2, P3, P4, P5>& p,
761 const Tuple<C1, C2, C3, C4, C5>& c) { 839 const base::Tuple<C1, C2, C3, C4, C5>& c) {
762 return (*function)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<4>(p), get< 0>(c), get<1>(c), get<2>(c), get<3>(c), get<4>(c)); 840 return (*function)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
841 base::get<3>(p), base::get<4>(p), base::get<0>(c), base::get<1>(c),
842 base::get<2>(c), base::get<3>(c), base::get<4>(c));
763 } 843 }
764 844
765 // 5 - 6 845 // 5 - 6
766 template <typename R, typename T, typename Method, typename P1, typename P2, 846 template <typename R, typename T, typename Method, typename P1, typename P2,
767 typename P3, typename P4, typename P5, typename C1, typename C2, 847 typename P3, typename P4, typename P5, typename C1, typename C2,
768 typename C3, typename C4, typename C5, typename C6> 848 typename C3, typename C4, typename C5, typename C6>
769 inline R DispatchToMethod(T* obj, Method method, 849 inline R DispatchToMethod(T* obj, Method method,
770 const Tuple<P1, P2, P3, P4, P5>& p, 850 const base::Tuple<P1, P2, P3, P4, P5>& p,
771 const Tuple<C1, C2, C3, C4, C5, C6>& c) { 851 const base::Tuple<C1, C2, C3, C4, C5, C6>& c) {
772 return (obj->*method)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<4>(p), g et<0>(c), get<1>(c), get<2>(c), get<3>(c), get<4>(c), get<5>(c)); 852 return (obj->*method)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
853 base::get<3>(p), base::get<4>(p), base::get<0>(c), base::get<1>(c),
854 base::get<2>(c), base::get<3>(c), base::get<4>(c), base::get<5>(c));
773 } 855 }
774 template <typename R, typename Function, typename P1, typename P2, typename P3, 856 template <typename R, typename Function, typename P1, typename P2, typename P3,
775 typename P4, typename P5, typename C1, typename C2, typename C3, 857 typename P4, typename P5, typename C1, typename C2, typename C3,
776 typename C4, typename C5, typename C6> 858 typename C4, typename C5, typename C6>
777 inline R DispatchToFunction(Function function, 859 inline R DispatchToFunction(Function function,
778 const Tuple<P1, P2, P3, P4, P5>& p, 860 const base::Tuple<P1, P2, P3, P4, P5>& p,
779 const Tuple<C1, C2, C3, C4, C5, C6>& c) { 861 const base::Tuple<C1, C2, C3, C4, C5, C6>& c) {
780 return (*function)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<4>(p), get< 0>(c), get<1>(c), get<2>(c), get<3>(c), get<4>(c), get<5>(c)); 862 return (*function)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
863 base::get<3>(p), base::get<4>(p), base::get<0>(c), base::get<1>(c),
864 base::get<2>(c), base::get<3>(c), base::get<4>(c), base::get<5>(c));
781 } 865 }
782 866
783 // 6 - 0 867 // 6 - 0
784 template <typename R, typename T, typename Method, typename P1, typename P2, 868 template <typename R, typename T, typename Method, typename P1, typename P2,
785 typename P3, typename P4, typename P5, typename P6> 869 typename P3, typename P4, typename P5, typename P6>
786 inline R DispatchToMethod(T* obj, Method method, 870 inline R DispatchToMethod(T* obj, Method method,
787 const Tuple<P1, P2, P3, P4, P5, P6>& p, 871 const base::Tuple<P1, P2, P3, P4, P5, P6>& p,
788 const Tuple<>& c) { 872 const base::Tuple<>& c) {
789 return (obj->*method)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<4>(p), g et<5>(p)); 873 return (obj->*method)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
874 base::get<3>(p), base::get<4>(p), base::get<5>(p));
790 } 875 }
791 template <typename R, typename Function, typename P1, typename P2, typename P3, 876 template <typename R, typename Function, typename P1, typename P2, typename P3,
792 typename P4, typename P5, typename P6> 877 typename P4, typename P5, typename P6>
793 inline R DispatchToFunction(Function function, 878 inline R DispatchToFunction(Function function,
794 const Tuple<P1, P2, P3, P4, P5, P6>& p, 879 const base::Tuple<P1, P2, P3, P4, P5, P6>& p,
795 const Tuple<>& c) { 880 const base::Tuple<>& c) {
796 return (*function)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<4>(p), get< 5>(p)); 881 return (*function)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
882 base::get<3>(p), base::get<4>(p), base::get<5>(p));
797 } 883 }
798 884
799 // 6 - 1 885 // 6 - 1
800 template <typename R, typename T, typename Method, typename P1, typename P2, 886 template <typename R, typename T, typename Method, typename P1, typename P2,
801 typename P3, typename P4, typename P5, typename P6, typename C1> 887 typename P3, typename P4, typename P5, typename P6, typename C1>
802 inline R DispatchToMethod(T* obj, Method method, 888 inline R DispatchToMethod(T* obj, Method method,
803 const Tuple<P1, P2, P3, P4, P5, P6>& p, 889 const base::Tuple<P1, P2, P3, P4, P5, P6>& p,
804 const Tuple<C1>& c) { 890 const base::Tuple<C1>& c) {
805 return (obj->*method)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<4>(p), g et<5>(p), get<0>(c)); 891 return (obj->*method)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
892 base::get<3>(p), base::get<4>(p), base::get<5>(p), base::get<0>(c));
806 } 893 }
807 template <typename R, typename Function, typename P1, typename P2, typename P3, 894 template <typename R, typename Function, typename P1, typename P2, typename P3,
808 typename P4, typename P5, typename P6, typename C1> 895 typename P4, typename P5, typename P6, typename C1>
809 inline R DispatchToFunction(Function function, 896 inline R DispatchToFunction(Function function,
810 const Tuple<P1, P2, P3, P4, P5, P6>& p, 897 const base::Tuple<P1, P2, P3, P4, P5, P6>& p,
811 const Tuple<C1>& c) { 898 const base::Tuple<C1>& c) {
812 return (*function)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<4>(p), get< 5>(p), get<0>(c)); 899 return (*function)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
900 base::get<3>(p), base::get<4>(p), base::get<5>(p), base::get<0>(c));
813 } 901 }
814 902
815 // 6 - 2 903 // 6 - 2
816 template <typename R, typename T, typename Method, typename P1, typename P2, 904 template <typename R, typename T, typename Method, typename P1, typename P2,
817 typename P3, typename P4, typename P5, typename P6, typename C1, 905 typename P3, typename P4, typename P5, typename P6, typename C1,
818 typename C2> 906 typename C2>
819 inline R DispatchToMethod(T* obj, Method method, 907 inline R DispatchToMethod(T* obj, Method method,
820 const Tuple<P1, P2, P3, P4, P5, P6>& p, 908 const base::Tuple<P1, P2, P3, P4, P5, P6>& p,
821 const Tuple<C1, C2>& c) { 909 const base::Tuple<C1, C2>& c) {
822 return (obj->*method)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<4>(p), g et<5>(p), get<0>(c), get<1>(c)); 910 return (obj->*method)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
911 base::get<3>(p), base::get<4>(p), base::get<5>(p), base::get<0>(c),
912 base::get<1>(c));
823 } 913 }
824 template <typename R, typename Function, typename P1, typename P2, typename P3, 914 template <typename R, typename Function, typename P1, typename P2, typename P3,
825 typename P4, typename P5, typename P6, typename C1, typename C2> 915 typename P4, typename P5, typename P6, typename C1, typename C2>
826 inline R DispatchToFunction(Function function, 916 inline R DispatchToFunction(Function function,
827 const Tuple<P1, P2, P3, P4, P5, P6>& p, 917 const base::Tuple<P1, P2, P3, P4, P5, P6>& p,
828 const Tuple<C1, C2>& c) { 918 const base::Tuple<C1, C2>& c) {
829 return (*function)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<4>(p), get< 5>(p), get<0>(c), get<1>(c)); 919 return (*function)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
920 base::get<3>(p), base::get<4>(p), base::get<5>(p), base::get<0>(c),
921 base::get<1>(c));
830 } 922 }
831 923
832 // 6 - 3 924 // 6 - 3
833 template <typename R, typename T, typename Method, typename P1, typename P2, 925 template <typename R, typename T, typename Method, typename P1, typename P2,
834 typename P3, typename P4, typename P5, typename P6, typename C1, 926 typename P3, typename P4, typename P5, typename P6, typename C1,
835 typename C2, typename C3> 927 typename C2, typename C3>
836 inline R DispatchToMethod(T* obj, Method method, 928 inline R DispatchToMethod(T* obj, Method method,
837 const Tuple<P1, P2, P3, P4, P5, P6>& p, 929 const base::Tuple<P1, P2, P3, P4, P5, P6>& p,
838 const Tuple<C1, C2, C3>& c) { 930 const base::Tuple<C1, C2, C3>& c) {
839 return (obj->*method)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<4>(p), g et<5>(p), get<0>(c), get<1>(c), get<2>(c)); 931 return (obj->*method)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
932 base::get<3>(p), base::get<4>(p), base::get<5>(p), base::get<0>(c),
933 base::get<1>(c), base::get<2>(c));
840 } 934 }
841 template <typename R, typename Function, typename P1, typename P2, typename P3, 935 template <typename R, typename Function, typename P1, typename P2, typename P3,
842 typename P4, typename P5, typename P6, typename C1, typename C2, 936 typename P4, typename P5, typename P6, typename C1, typename C2,
843 typename C3> 937 typename C3>
844 inline R DispatchToFunction(Function function, 938 inline R DispatchToFunction(Function function,
845 const Tuple<P1, P2, P3, P4, P5, P6>& p, 939 const base::Tuple<P1, P2, P3, P4, P5, P6>& p,
846 const Tuple<C1, C2, C3>& c) { 940 const base::Tuple<C1, C2, C3>& c) {
847 return (*function)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<4>(p), get< 5>(p), get<0>(c), get<1>(c), get<2>(c)); 941 return (*function)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
942 base::get<3>(p), base::get<4>(p), base::get<5>(p), base::get<0>(c),
943 base::get<1>(c), base::get<2>(c));
848 } 944 }
849 945
850 // 6 - 4 946 // 6 - 4
851 template <typename R, typename T, typename Method, typename P1, typename P2, 947 template <typename R, typename T, typename Method, typename P1, typename P2,
852 typename P3, typename P4, typename P5, typename P6, typename C1, 948 typename P3, typename P4, typename P5, typename P6, typename C1,
853 typename C2, typename C3, typename C4> 949 typename C2, typename C3, typename C4>
854 inline R DispatchToMethod(T* obj, Method method, 950 inline R DispatchToMethod(T* obj, Method method,
855 const Tuple<P1, P2, P3, P4, P5, P6>& p, 951 const base::Tuple<P1, P2, P3, P4, P5, P6>& p,
856 const Tuple<C1, C2, C3, C4>& c) { 952 const base::Tuple<C1, C2, C3, C4>& c) {
857 return (obj->*method)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<4>(p), g et<5>(p), get<0>(c), get<1>(c), get<2>(c), get<3>(c)); 953 return (obj->*method)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
954 base::get<3>(p), base::get<4>(p), base::get<5>(p), base::get<0>(c),
955 base::get<1>(c), base::get<2>(c), base::get<3>(c));
858 } 956 }
859 template <typename R, typename Function, typename P1, typename P2, typename P3, 957 template <typename R, typename Function, typename P1, typename P2, typename P3,
860 typename P4, typename P5, typename P6, typename C1, typename C2, 958 typename P4, typename P5, typename P6, typename C1, typename C2,
861 typename C3, typename C4> 959 typename C3, typename C4>
862 inline R DispatchToFunction(Function function, 960 inline R DispatchToFunction(Function function,
863 const Tuple<P1, P2, P3, P4, P5, P6>& p, 961 const base::Tuple<P1, P2, P3, P4, P5, P6>& p,
864 const Tuple<C1, C2, C3, C4>& c) { 962 const base::Tuple<C1, C2, C3, C4>& c) {
865 return (*function)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<4>(p), get< 5>(p), get<0>(c), get<1>(c), get<2>(c), get<3>(c)); 963 return (*function)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
964 base::get<3>(p), base::get<4>(p), base::get<5>(p), base::get<0>(c),
965 base::get<1>(c), base::get<2>(c), base::get<3>(c));
866 } 966 }
867 967
868 // 6 - 5 968 // 6 - 5
869 template <typename R, typename T, typename Method, typename P1, typename P2, 969 template <typename R, typename T, typename Method, typename P1, typename P2,
870 typename P3, typename P4, typename P5, typename P6, typename C1, 970 typename P3, typename P4, typename P5, typename P6, typename C1,
871 typename C2, typename C3, typename C4, typename C5> 971 typename C2, typename C3, typename C4, typename C5>
872 inline R DispatchToMethod(T* obj, Method method, 972 inline R DispatchToMethod(T* obj, Method method,
873 const Tuple<P1, P2, P3, P4, P5, P6>& p, 973 const base::Tuple<P1, P2, P3, P4, P5, P6>& p,
874 const Tuple<C1, C2, C3, C4, C5>& c) { 974 const base::Tuple<C1, C2, C3, C4, C5>& c) {
875 return (obj->*method)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<4>(p), g et<5>(p), get<0>(c), get<1>(c), get<2>(c), get<3>(c), get<4>(c)); 975 return (obj->*method)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
976 base::get<3>(p), base::get<4>(p), base::get<5>(p), base::get<0>(c),
977 base::get<1>(c), base::get<2>(c), base::get<3>(c), base::get<4>(c));
876 } 978 }
877 template <typename R, typename Function, typename P1, typename P2, typename P3, 979 template <typename R, typename Function, typename P1, typename P2, typename P3,
878 typename P4, typename P5, typename P6, typename C1, typename C2, 980 typename P4, typename P5, typename P6, typename C1, typename C2,
879 typename C3, typename C4, typename C5> 981 typename C3, typename C4, typename C5>
880 inline R DispatchToFunction(Function function, 982 inline R DispatchToFunction(Function function,
881 const Tuple<P1, P2, P3, P4, P5, P6>& p, 983 const base::Tuple<P1, P2, P3, P4, P5, P6>& p,
882 const Tuple<C1, C2, C3, C4, C5>& c) { 984 const base::Tuple<C1, C2, C3, C4, C5>& c) {
883 return (*function)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<4>(p), get< 5>(p), get<0>(c), get<1>(c), get<2>(c), get<3>(c), get<4>(c)); 985 return (*function)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
986 base::get<3>(p), base::get<4>(p), base::get<5>(p), base::get<0>(c),
987 base::get<1>(c), base::get<2>(c), base::get<3>(c), base::get<4>(c));
884 } 988 }
885 989
886 // 6 - 6 990 // 6 - 6
887 template <typename R, typename T, typename Method, typename P1, typename P2, 991 template <typename R, typename T, typename Method, typename P1, typename P2,
888 typename P3, typename P4, typename P5, typename P6, typename C1, 992 typename P3, typename P4, typename P5, typename P6, typename C1,
889 typename C2, typename C3, typename C4, typename C5, typename C6> 993 typename C2, typename C3, typename C4, typename C5, typename C6>
890 inline R DispatchToMethod(T* obj, Method method, 994 inline R DispatchToMethod(T* obj, Method method,
891 const Tuple<P1, P2, P3, P4, P5, P6>& p, 995 const base::Tuple<P1, P2, P3, P4, P5, P6>& p,
892 const Tuple<C1, C2, C3, C4, C5, C6>& c) { 996 const base::Tuple<C1, C2, C3, C4, C5, C6>& c) {
893 return (obj->*method)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<4>(p), g et<5>(p), get<0>(c), get<1>(c), get<2>(c), get<3>(c), get<4>(c), get<5>(c)); 997 return (obj->*method)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
998 base::get<3>(p), base::get<4>(p), base::get<5>(p), base::get<0>(c),
999 base::get<1>(c), base::get<2>(c), base::get<3>(c), base::get<4>(c),
1000 base::get<5>(c));
894 } 1001 }
895 template <typename R, typename Function, typename P1, typename P2, typename P3, 1002 template <typename R, typename Function, typename P1, typename P2, typename P3,
896 typename P4, typename P5, typename P6, typename C1, typename C2, 1003 typename P4, typename P5, typename P6, typename C1, typename C2,
897 typename C3, typename C4, typename C5, typename C6> 1004 typename C3, typename C4, typename C5, typename C6>
898 inline R DispatchToFunction(Function function, 1005 inline R DispatchToFunction(Function function,
899 const Tuple<P1, P2, P3, P4, P5, P6>& p, 1006 const base::Tuple<P1, P2, P3, P4, P5, P6>& p,
900 const Tuple<C1, C2, C3, C4, C5, C6>& c) { 1007 const base::Tuple<C1, C2, C3, C4, C5, C6>& c) {
901 return (*function)(get<0>(p), get<1>(p), get<2>(p), get<3>(p), get<4>(p), get< 5>(p), get<0>(c), get<1>(c), get<2>(c), get<3>(c), get<4>(c), get<5>(c)); 1008 return (*function)(base::get<0>(p), base::get<1>(p), base::get<2>(p),
1009 base::get<3>(p), base::get<4>(p), base::get<5>(p), base::get<0>(c),
1010 base::get<1>(c), base::get<2>(c), base::get<3>(c), base::get<4>(c),
1011 base::get<5>(c));
902 } 1012 }
903 1013
904 // Interface that is exposed to the consumer, that does the actual calling 1014 // Interface that is exposed to the consumer, that does the actual calling
905 // of the method. 1015 // of the method.
906 template <typename R, typename Params> 1016 template <typename R, typename Params>
907 class MutantRunner { 1017 class MutantRunner {
908 public: 1018 public:
909 virtual R RunWithParams(const Params& params) = 0; 1019 virtual R RunWithParams(const Params& params) = 0;
910 virtual ~MutantRunner() {} 1020 virtual ~MutantRunner() {}
911 }; 1021 };
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
977 // Redirects operator() to MutantRunner<Params>::Run() 1087 // Redirects operator() to MutantRunner<Params>::Run()
978 template <typename R, typename Params> 1088 template <typename R, typename Params>
979 struct MutantFunctor { 1089 struct MutantFunctor {
980 explicit MutantFunctor(MutantRunner<R, Params>* cb) : impl_(cb) { 1090 explicit MutantFunctor(MutantRunner<R, Params>* cb) : impl_(cb) {
981 } 1091 }
982 1092
983 ~MutantFunctor() { 1093 ~MutantFunctor() {
984 } 1094 }
985 1095
986 inline R operator()() { 1096 inline R operator()() {
987 return impl_->RunWithParams(Tuple<>()); 1097 return impl_->RunWithParams(base::Tuple<>());
988 } 1098 }
989 1099
990 template <typename Arg1> 1100 template <typename Arg1>
991 inline R operator()(const Arg1& a) { 1101 inline R operator()(const Arg1& a) {
992 return impl_->RunWithParams(Params(a)); 1102 return impl_->RunWithParams(Params(a));
993 } 1103 }
994 1104
995 template <typename Arg1, typename Arg2> 1105 template <typename Arg1, typename Arg2>
996 inline R operator()(const Arg1& a, const Arg2& b) { 1106 inline R operator()(const Arg1& a, const Arg2& b) {
997 return impl_->RunWithParams(Params(a, b)); 1107 return impl_->RunWithParams(Params(a, b));
(...skipping 12 matching lines...) Expand all
1010 1120
1011 private: 1121 private:
1012 // We need copy constructor since MutantFunctor is copied few times 1122 // We need copy constructor since MutantFunctor is copied few times
1013 // inside GMock machinery, hence no DISALLOW_EVIL_CONTRUCTORS 1123 // inside GMock machinery, hence no DISALLOW_EVIL_CONTRUCTORS
1014 MutantFunctor(); 1124 MutantFunctor();
1015 linked_ptr<MutantRunner<R, Params> > impl_; 1125 linked_ptr<MutantRunner<R, Params> > impl_;
1016 }; 1126 };
1017 1127
1018 // 0 - 0 1128 // 0 - 0
1019 template <typename R, typename T, typename U> 1129 template <typename R, typename T, typename U>
1020 inline MutantFunctor<R, Tuple<>> 1130 inline MutantFunctor<R, base::Tuple<>>
1021 CreateFunctor(T* obj, R (U::*method)()) { 1131 CreateFunctor(T* obj, R (U::*method)()) {
1022 MutantRunner<R, Tuple<>>* t = 1132 MutantRunner<R, base::Tuple<>>* t =
1023 new Mutant<R, T, R (U::*)(), 1133 new Mutant<R, T, R (U::*)(),
1024 Tuple<>, Tuple<>> 1134 base::Tuple<>, base::Tuple<>>
1025 (obj, method, MakeTuple()); 1135 (obj, method, base::MakeTuple());
1026 return MutantFunctor<R, Tuple<>>(t); 1136 return MutantFunctor<R, base::Tuple<>>(t);
1027 } 1137 }
1028 1138
1029 template <typename R> 1139 template <typename R>
1030 inline MutantFunctor<R, Tuple<>> 1140 inline MutantFunctor<R, base::Tuple<>>
1031 CreateFunctor(R (*function)()) { 1141 CreateFunctor(R (*function)()) {
1032 MutantRunner<R, Tuple<>>* t = 1142 MutantRunner<R, base::Tuple<>>* t =
1033 new MutantFunction<R, R (*)(), 1143 new MutantFunction<R, R (*)(),
1034 Tuple<>, Tuple<>> 1144 base::Tuple<>, base::Tuple<>>
1035 (function, MakeTuple()); 1145 (function, base::MakeTuple());
1036 return MutantFunctor<R, Tuple<>>(t); 1146 return MutantFunctor<R, base::Tuple<>>(t);
1037 } 1147 }
1038 1148
1039 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 1149 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1040 template <typename R, typename T, typename U> 1150 template <typename R, typename T, typename U>
1041 inline MutantFunctor<R, Tuple<>> 1151 inline MutantFunctor<R, base::Tuple<>>
1042 CreateFunctor(T** obj, R (U::*method)()) { 1152 CreateFunctor(T** obj, R (U::*method)()) {
1043 MutantRunner<R, Tuple<>>* t = 1153 MutantRunner<R, base::Tuple<>>* t =
1044 new MutantLateObjectBind<R, T, R (U::*)(), 1154 new MutantLateObjectBind<R, T, R (U::*)(),
1045 Tuple<>, Tuple<>> 1155 base::Tuple<>, base::Tuple<>>
1046 (obj, method, MakeTuple()); 1156 (obj, method, base::MakeTuple());
1047 return MutantFunctor<R, Tuple<>>(t); 1157 return MutantFunctor<R, base::Tuple<>>(t);
1048 } 1158 }
1049 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 1159 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1050 1160
1051 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 1161 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
1052 template <typename R, typename T, typename U> 1162 template <typename R, typename T, typename U>
1053 inline MutantFunctor<R, Tuple<>> 1163 inline MutantFunctor<R, base::Tuple<>>
1054 CreateFunctor(T* obj, R (__stdcall U::*method)()) { 1164 CreateFunctor(T* obj, R (__stdcall U::*method)()) {
1055 MutantRunner<R, Tuple<>>* t = 1165 MutantRunner<R, base::Tuple<>>* t =
1056 new Mutant<R, T, R (__stdcall U::*)(), 1166 new Mutant<R, T, R (__stdcall U::*)(),
1057 Tuple<>, Tuple<>> 1167 base::Tuple<>, base::Tuple<>>
1058 (obj, method, MakeTuple()); 1168 (obj, method, base::MakeTuple());
1059 return MutantFunctor<R, Tuple<>>(t); 1169 return MutantFunctor<R, base::Tuple<>>(t);
1060 } 1170 }
1061 1171
1062 template <typename R> 1172 template <typename R>
1063 inline MutantFunctor<R, Tuple<>> 1173 inline MutantFunctor<R, base::Tuple<>>
1064 CreateFunctor(R (__stdcall *function)()) { 1174 CreateFunctor(R (__stdcall *function)()) {
1065 MutantRunner<R, Tuple<>>* t = 1175 MutantRunner<R, base::Tuple<>>* t =
1066 new MutantFunction<R, R (__stdcall *)(), 1176 new MutantFunction<R, R (__stdcall *)(),
1067 Tuple<>, Tuple<>> 1177 base::Tuple<>, base::Tuple<>>
1068 (function, MakeTuple()); 1178 (function, base::MakeTuple());
1069 return MutantFunctor<R, Tuple<>>(t); 1179 return MutantFunctor<R, base::Tuple<>>(t);
1070 } 1180 }
1071 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 1181 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1072 template <typename R, typename T, typename U> 1182 template <typename R, typename T, typename U>
1073 inline MutantFunctor<R, Tuple<>> 1183 inline MutantFunctor<R, base::Tuple<>>
1074 CreateFunctor(T** obj, R (__stdcall U::*method)()) { 1184 CreateFunctor(T** obj, R (__stdcall U::*method)()) {
1075 MutantRunner<R, Tuple<>>* t = 1185 MutantRunner<R, base::Tuple<>>* t =
1076 new MutantLateObjectBind<R, T, R (__stdcall U::*)(), 1186 new MutantLateObjectBind<R, T, R (__stdcall U::*)(),
1077 Tuple<>, Tuple<>> 1187 base::Tuple<>, base::Tuple<>>
1078 (obj, method, MakeTuple()); 1188 (obj, method, base::MakeTuple());
1079 return MutantFunctor<R, Tuple<>>(t); 1189 return MutantFunctor<R, base::Tuple<>>(t);
1080 } 1190 }
1081 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 1191 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1082 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 1192 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
1083 1193
1084 // 0 - 1 1194 // 0 - 1
1085 template <typename R, typename T, typename U, typename A1> 1195 template <typename R, typename T, typename U, typename A1>
1086 inline MutantFunctor<R, Tuple<A1>> 1196 inline MutantFunctor<R, base::Tuple<A1>>
1087 CreateFunctor(T* obj, R (U::*method)(A1)) { 1197 CreateFunctor(T* obj, R (U::*method)(A1)) {
1088 MutantRunner<R, Tuple<A1>>* t = 1198 MutantRunner<R, base::Tuple<A1>>* t =
1089 new Mutant<R, T, R (U::*)(A1), 1199 new Mutant<R, T, R (U::*)(A1),
1090 Tuple<>, Tuple<A1>> 1200 base::Tuple<>, base::Tuple<A1>>
1091 (obj, method, MakeTuple()); 1201 (obj, method, base::MakeTuple());
1092 return MutantFunctor<R, Tuple<A1>>(t); 1202 return MutantFunctor<R, base::Tuple<A1>>(t);
1093 } 1203 }
1094 1204
1095 template <typename R, typename A1> 1205 template <typename R, typename A1>
1096 inline MutantFunctor<R, Tuple<A1>> 1206 inline MutantFunctor<R, base::Tuple<A1>>
1097 CreateFunctor(R (*function)(A1)) { 1207 CreateFunctor(R (*function)(A1)) {
1098 MutantRunner<R, Tuple<A1>>* t = 1208 MutantRunner<R, base::Tuple<A1>>* t =
1099 new MutantFunction<R, R (*)(A1), 1209 new MutantFunction<R, R (*)(A1),
1100 Tuple<>, Tuple<A1>> 1210 base::Tuple<>, base::Tuple<A1>>
1101 (function, MakeTuple()); 1211 (function, base::MakeTuple());
1102 return MutantFunctor<R, Tuple<A1>>(t); 1212 return MutantFunctor<R, base::Tuple<A1>>(t);
1103 } 1213 }
1104 1214
1105 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 1215 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1106 template <typename R, typename T, typename U, typename A1> 1216 template <typename R, typename T, typename U, typename A1>
1107 inline MutantFunctor<R, Tuple<A1>> 1217 inline MutantFunctor<R, base::Tuple<A1>>
1108 CreateFunctor(T** obj, R (U::*method)(A1)) { 1218 CreateFunctor(T** obj, R (U::*method)(A1)) {
1109 MutantRunner<R, Tuple<A1>>* t = 1219 MutantRunner<R, base::Tuple<A1>>* t =
1110 new MutantLateObjectBind<R, T, R (U::*)(A1), 1220 new MutantLateObjectBind<R, T, R (U::*)(A1),
1111 Tuple<>, Tuple<A1>> 1221 base::Tuple<>, base::Tuple<A1>>
1112 (obj, method, MakeTuple()); 1222 (obj, method, base::MakeTuple());
1113 return MutantFunctor<R, Tuple<A1>>(t); 1223 return MutantFunctor<R, base::Tuple<A1>>(t);
1114 } 1224 }
1115 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 1225 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1116 1226
1117 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 1227 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
1118 template <typename R, typename T, typename U, typename A1> 1228 template <typename R, typename T, typename U, typename A1>
1119 inline MutantFunctor<R, Tuple<A1>> 1229 inline MutantFunctor<R, base::Tuple<A1>>
1120 CreateFunctor(T* obj, R (__stdcall U::*method)(A1)) { 1230 CreateFunctor(T* obj, R (__stdcall U::*method)(A1)) {
1121 MutantRunner<R, Tuple<A1>>* t = 1231 MutantRunner<R, base::Tuple<A1>>* t =
1122 new Mutant<R, T, R (__stdcall U::*)(A1), 1232 new Mutant<R, T, R (__stdcall U::*)(A1),
1123 Tuple<>, Tuple<A1>> 1233 base::Tuple<>, base::Tuple<A1>>
1124 (obj, method, MakeTuple()); 1234 (obj, method, base::MakeTuple());
1125 return MutantFunctor<R, Tuple<A1>>(t); 1235 return MutantFunctor<R, base::Tuple<A1>>(t);
1126 } 1236 }
1127 1237
1128 template <typename R, typename A1> 1238 template <typename R, typename A1>
1129 inline MutantFunctor<R, Tuple<A1>> 1239 inline MutantFunctor<R, base::Tuple<A1>>
1130 CreateFunctor(R (__stdcall *function)(A1)) { 1240 CreateFunctor(R (__stdcall *function)(A1)) {
1131 MutantRunner<R, Tuple<A1>>* t = 1241 MutantRunner<R, base::Tuple<A1>>* t =
1132 new MutantFunction<R, R (__stdcall *)(A1), 1242 new MutantFunction<R, R (__stdcall *)(A1),
1133 Tuple<>, Tuple<A1>> 1243 base::Tuple<>, base::Tuple<A1>>
1134 (function, MakeTuple()); 1244 (function, base::MakeTuple());
1135 return MutantFunctor<R, Tuple<A1>>(t); 1245 return MutantFunctor<R, base::Tuple<A1>>(t);
1136 } 1246 }
1137 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 1247 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1138 template <typename R, typename T, typename U, typename A1> 1248 template <typename R, typename T, typename U, typename A1>
1139 inline MutantFunctor<R, Tuple<A1>> 1249 inline MutantFunctor<R, base::Tuple<A1>>
1140 CreateFunctor(T** obj, R (__stdcall U::*method)(A1)) { 1250 CreateFunctor(T** obj, R (__stdcall U::*method)(A1)) {
1141 MutantRunner<R, Tuple<A1>>* t = 1251 MutantRunner<R, base::Tuple<A1>>* t =
1142 new MutantLateObjectBind<R, T, R (__stdcall U::*)(A1), 1252 new MutantLateObjectBind<R, T, R (__stdcall U::*)(A1),
1143 Tuple<>, Tuple<A1>> 1253 base::Tuple<>, base::Tuple<A1>>
1144 (obj, method, MakeTuple()); 1254 (obj, method, base::MakeTuple());
1145 return MutantFunctor<R, Tuple<A1>>(t); 1255 return MutantFunctor<R, base::Tuple<A1>>(t);
1146 } 1256 }
1147 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 1257 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1148 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 1258 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
1149 1259
1150 // 0 - 2 1260 // 0 - 2
1151 template <typename R, typename T, typename U, typename A1, typename A2> 1261 template <typename R, typename T, typename U, typename A1, typename A2>
1152 inline MutantFunctor<R, Tuple<A1, A2>> 1262 inline MutantFunctor<R, base::Tuple<A1, A2>>
1153 CreateFunctor(T* obj, R (U::*method)(A1, A2)) { 1263 CreateFunctor(T* obj, R (U::*method)(A1, A2)) {
1154 MutantRunner<R, Tuple<A1, A2>>* t = 1264 MutantRunner<R, base::Tuple<A1, A2>>* t =
1155 new Mutant<R, T, R (U::*)(A1, A2), 1265 new Mutant<R, T, R (U::*)(A1, A2),
1156 Tuple<>, Tuple<A1, A2>> 1266 base::Tuple<>, base::Tuple<A1, A2>>
1157 (obj, method, MakeTuple()); 1267 (obj, method, base::MakeTuple());
1158 return MutantFunctor<R, Tuple<A1, A2>>(t); 1268 return MutantFunctor<R, base::Tuple<A1, A2>>(t);
1159 } 1269 }
1160 1270
1161 template <typename R, typename A1, typename A2> 1271 template <typename R, typename A1, typename A2>
1162 inline MutantFunctor<R, Tuple<A1, A2>> 1272 inline MutantFunctor<R, base::Tuple<A1, A2>>
1163 CreateFunctor(R (*function)(A1, A2)) { 1273 CreateFunctor(R (*function)(A1, A2)) {
1164 MutantRunner<R, Tuple<A1, A2>>* t = 1274 MutantRunner<R, base::Tuple<A1, A2>>* t =
1165 new MutantFunction<R, R (*)(A1, A2), 1275 new MutantFunction<R, R (*)(A1, A2),
1166 Tuple<>, Tuple<A1, A2>> 1276 base::Tuple<>, base::Tuple<A1, A2>>
1167 (function, MakeTuple()); 1277 (function, base::MakeTuple());
1168 return MutantFunctor<R, Tuple<A1, A2>>(t); 1278 return MutantFunctor<R, base::Tuple<A1, A2>>(t);
1169 } 1279 }
1170 1280
1171 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 1281 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1172 template <typename R, typename T, typename U, typename A1, typename A2> 1282 template <typename R, typename T, typename U, typename A1, typename A2>
1173 inline MutantFunctor<R, Tuple<A1, A2>> 1283 inline MutantFunctor<R, base::Tuple<A1, A2>>
1174 CreateFunctor(T** obj, R (U::*method)(A1, A2)) { 1284 CreateFunctor(T** obj, R (U::*method)(A1, A2)) {
1175 MutantRunner<R, Tuple<A1, A2>>* t = 1285 MutantRunner<R, base::Tuple<A1, A2>>* t =
1176 new MutantLateObjectBind<R, T, R (U::*)(A1, A2), 1286 new MutantLateObjectBind<R, T, R (U::*)(A1, A2),
1177 Tuple<>, Tuple<A1, A2>> 1287 base::Tuple<>, base::Tuple<A1, A2>>
1178 (obj, method, MakeTuple()); 1288 (obj, method, base::MakeTuple());
1179 return MutantFunctor<R, Tuple<A1, A2>>(t); 1289 return MutantFunctor<R, base::Tuple<A1, A2>>(t);
1180 } 1290 }
1181 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 1291 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1182 1292
1183 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 1293 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
1184 template <typename R, typename T, typename U, typename A1, typename A2> 1294 template <typename R, typename T, typename U, typename A1, typename A2>
1185 inline MutantFunctor<R, Tuple<A1, A2>> 1295 inline MutantFunctor<R, base::Tuple<A1, A2>>
1186 CreateFunctor(T* obj, R (__stdcall U::*method)(A1, A2)) { 1296 CreateFunctor(T* obj, R (__stdcall U::*method)(A1, A2)) {
1187 MutantRunner<R, Tuple<A1, A2>>* t = 1297 MutantRunner<R, base::Tuple<A1, A2>>* t =
1188 new Mutant<R, T, R (__stdcall U::*)(A1, A2), 1298 new Mutant<R, T, R (__stdcall U::*)(A1, A2),
1189 Tuple<>, Tuple<A1, A2>> 1299 base::Tuple<>, base::Tuple<A1, A2>>
1190 (obj, method, MakeTuple()); 1300 (obj, method, base::MakeTuple());
1191 return MutantFunctor<R, Tuple<A1, A2>>(t); 1301 return MutantFunctor<R, base::Tuple<A1, A2>>(t);
1192 } 1302 }
1193 1303
1194 template <typename R, typename A1, typename A2> 1304 template <typename R, typename A1, typename A2>
1195 inline MutantFunctor<R, Tuple<A1, A2>> 1305 inline MutantFunctor<R, base::Tuple<A1, A2>>
1196 CreateFunctor(R (__stdcall *function)(A1, A2)) { 1306 CreateFunctor(R (__stdcall *function)(A1, A2)) {
1197 MutantRunner<R, Tuple<A1, A2>>* t = 1307 MutantRunner<R, base::Tuple<A1, A2>>* t =
1198 new MutantFunction<R, R (__stdcall *)(A1, A2), 1308 new MutantFunction<R, R (__stdcall *)(A1, A2),
1199 Tuple<>, Tuple<A1, A2>> 1309 base::Tuple<>, base::Tuple<A1, A2>>
1200 (function, MakeTuple()); 1310 (function, base::MakeTuple());
1201 return MutantFunctor<R, Tuple<A1, A2>>(t); 1311 return MutantFunctor<R, base::Tuple<A1, A2>>(t);
1202 } 1312 }
1203 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 1313 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1204 template <typename R, typename T, typename U, typename A1, typename A2> 1314 template <typename R, typename T, typename U, typename A1, typename A2>
1205 inline MutantFunctor<R, Tuple<A1, A2>> 1315 inline MutantFunctor<R, base::Tuple<A1, A2>>
1206 CreateFunctor(T** obj, R (__stdcall U::*method)(A1, A2)) { 1316 CreateFunctor(T** obj, R (__stdcall U::*method)(A1, A2)) {
1207 MutantRunner<R, Tuple<A1, A2>>* t = 1317 MutantRunner<R, base::Tuple<A1, A2>>* t =
1208 new MutantLateObjectBind<R, T, R (__stdcall U::*)(A1, A2), 1318 new MutantLateObjectBind<R, T, R (__stdcall U::*)(A1, A2),
1209 Tuple<>, Tuple<A1, A2>> 1319 base::Tuple<>, base::Tuple<A1, A2>>
1210 (obj, method, MakeTuple()); 1320 (obj, method, base::MakeTuple());
1211 return MutantFunctor<R, Tuple<A1, A2>>(t); 1321 return MutantFunctor<R, base::Tuple<A1, A2>>(t);
1212 } 1322 }
1213 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 1323 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1214 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 1324 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
1215 1325
1216 // 0 - 3 1326 // 0 - 3
1217 template <typename R, typename T, typename U, typename A1, typename A2, 1327 template <typename R, typename T, typename U, typename A1, typename A2,
1218 typename A3> 1328 typename A3>
1219 inline MutantFunctor<R, Tuple<A1, A2, A3>> 1329 inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
1220 CreateFunctor(T* obj, R (U::*method)(A1, A2, A3)) { 1330 CreateFunctor(T* obj, R (U::*method)(A1, A2, A3)) {
1221 MutantRunner<R, Tuple<A1, A2, A3>>* t = 1331 MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
1222 new Mutant<R, T, R (U::*)(A1, A2, A3), 1332 new Mutant<R, T, R (U::*)(A1, A2, A3),
1223 Tuple<>, Tuple<A1, A2, A3>> 1333 base::Tuple<>, base::Tuple<A1, A2, A3>>
1224 (obj, method, MakeTuple()); 1334 (obj, method, base::MakeTuple());
1225 return MutantFunctor<R, Tuple<A1, A2, A3>>(t); 1335 return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
1226 } 1336 }
1227 1337
1228 template <typename R, typename A1, typename A2, typename A3> 1338 template <typename R, typename A1, typename A2, typename A3>
1229 inline MutantFunctor<R, Tuple<A1, A2, A3>> 1339 inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
1230 CreateFunctor(R (*function)(A1, A2, A3)) { 1340 CreateFunctor(R (*function)(A1, A2, A3)) {
1231 MutantRunner<R, Tuple<A1, A2, A3>>* t = 1341 MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
1232 new MutantFunction<R, R (*)(A1, A2, A3), 1342 new MutantFunction<R, R (*)(A1, A2, A3),
1233 Tuple<>, Tuple<A1, A2, A3>> 1343 base::Tuple<>, base::Tuple<A1, A2, A3>>
1234 (function, MakeTuple()); 1344 (function, base::MakeTuple());
1235 return MutantFunctor<R, Tuple<A1, A2, A3>>(t); 1345 return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
1236 } 1346 }
1237 1347
1238 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 1348 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1239 template <typename R, typename T, typename U, typename A1, typename A2, 1349 template <typename R, typename T, typename U, typename A1, typename A2,
1240 typename A3> 1350 typename A3>
1241 inline MutantFunctor<R, Tuple<A1, A2, A3>> 1351 inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
1242 CreateFunctor(T** obj, R (U::*method)(A1, A2, A3)) { 1352 CreateFunctor(T** obj, R (U::*method)(A1, A2, A3)) {
1243 MutantRunner<R, Tuple<A1, A2, A3>>* t = 1353 MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
1244 new MutantLateObjectBind<R, T, R (U::*)(A1, A2, A3), 1354 new MutantLateObjectBind<R, T, R (U::*)(A1, A2, A3),
1245 Tuple<>, Tuple<A1, A2, A3>> 1355 base::Tuple<>, base::Tuple<A1, A2, A3>>
1246 (obj, method, MakeTuple()); 1356 (obj, method, base::MakeTuple());
1247 return MutantFunctor<R, Tuple<A1, A2, A3>>(t); 1357 return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
1248 } 1358 }
1249 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 1359 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1250 1360
1251 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 1361 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
1252 template <typename R, typename T, typename U, typename A1, typename A2, 1362 template <typename R, typename T, typename U, typename A1, typename A2,
1253 typename A3> 1363 typename A3>
1254 inline MutantFunctor<R, Tuple<A1, A2, A3>> 1364 inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
1255 CreateFunctor(T* obj, R (__stdcall U::*method)(A1, A2, A3)) { 1365 CreateFunctor(T* obj, R (__stdcall U::*method)(A1, A2, A3)) {
1256 MutantRunner<R, Tuple<A1, A2, A3>>* t = 1366 MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
1257 new Mutant<R, T, R (__stdcall U::*)(A1, A2, A3), 1367 new Mutant<R, T, R (__stdcall U::*)(A1, A2, A3),
1258 Tuple<>, Tuple<A1, A2, A3>> 1368 base::Tuple<>, base::Tuple<A1, A2, A3>>
1259 (obj, method, MakeTuple()); 1369 (obj, method, base::MakeTuple());
1260 return MutantFunctor<R, Tuple<A1, A2, A3>>(t); 1370 return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
1261 } 1371 }
1262 1372
1263 template <typename R, typename A1, typename A2, typename A3> 1373 template <typename R, typename A1, typename A2, typename A3>
1264 inline MutantFunctor<R, Tuple<A1, A2, A3>> 1374 inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
1265 CreateFunctor(R (__stdcall *function)(A1, A2, A3)) { 1375 CreateFunctor(R (__stdcall *function)(A1, A2, A3)) {
1266 MutantRunner<R, Tuple<A1, A2, A3>>* t = 1376 MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
1267 new MutantFunction<R, R (__stdcall *)(A1, A2, A3), 1377 new MutantFunction<R, R (__stdcall *)(A1, A2, A3),
1268 Tuple<>, Tuple<A1, A2, A3>> 1378 base::Tuple<>, base::Tuple<A1, A2, A3>>
1269 (function, MakeTuple()); 1379 (function, base::MakeTuple());
1270 return MutantFunctor<R, Tuple<A1, A2, A3>>(t); 1380 return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
1271 } 1381 }
1272 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 1382 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1273 template <typename R, typename T, typename U, typename A1, typename A2, 1383 template <typename R, typename T, typename U, typename A1, typename A2,
1274 typename A3> 1384 typename A3>
1275 inline MutantFunctor<R, Tuple<A1, A2, A3>> 1385 inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
1276 CreateFunctor(T** obj, R (__stdcall U::*method)(A1, A2, A3)) { 1386 CreateFunctor(T** obj, R (__stdcall U::*method)(A1, A2, A3)) {
1277 MutantRunner<R, Tuple<A1, A2, A3>>* t = 1387 MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
1278 new MutantLateObjectBind<R, T, R (__stdcall U::*)(A1, A2, A3), 1388 new MutantLateObjectBind<R, T, R (__stdcall U::*)(A1, A2, A3),
1279 Tuple<>, Tuple<A1, A2, A3>> 1389 base::Tuple<>, base::Tuple<A1, A2, A3>>
1280 (obj, method, MakeTuple()); 1390 (obj, method, base::MakeTuple());
1281 return MutantFunctor<R, Tuple<A1, A2, A3>>(t); 1391 return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
1282 } 1392 }
1283 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 1393 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1284 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 1394 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
1285 1395
1286 // 0 - 4 1396 // 0 - 4
1287 template <typename R, typename T, typename U, typename A1, typename A2, 1397 template <typename R, typename T, typename U, typename A1, typename A2,
1288 typename A3, typename A4> 1398 typename A3, typename A4>
1289 inline MutantFunctor<R, Tuple<A1, A2, A3, A4>> 1399 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
1290 CreateFunctor(T* obj, R (U::*method)(A1, A2, A3, A4)) { 1400 CreateFunctor(T* obj, R (U::*method)(A1, A2, A3, A4)) {
1291 MutantRunner<R, Tuple<A1, A2, A3, A4>>* t = 1401 MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
1292 new Mutant<R, T, R (U::*)(A1, A2, A3, A4), 1402 new Mutant<R, T, R (U::*)(A1, A2, A3, A4),
1293 Tuple<>, Tuple<A1, A2, A3, A4>> 1403 base::Tuple<>, base::Tuple<A1, A2, A3, A4>>
1294 (obj, method, MakeTuple()); 1404 (obj, method, base::MakeTuple());
1295 return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t); 1405 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
1296 } 1406 }
1297 1407
1298 template <typename R, typename A1, typename A2, typename A3, typename A4> 1408 template <typename R, typename A1, typename A2, typename A3, typename A4>
1299 inline MutantFunctor<R, Tuple<A1, A2, A3, A4>> 1409 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
1300 CreateFunctor(R (*function)(A1, A2, A3, A4)) { 1410 CreateFunctor(R (*function)(A1, A2, A3, A4)) {
1301 MutantRunner<R, Tuple<A1, A2, A3, A4>>* t = 1411 MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
1302 new MutantFunction<R, R (*)(A1, A2, A3, A4), 1412 new MutantFunction<R, R (*)(A1, A2, A3, A4),
1303 Tuple<>, Tuple<A1, A2, A3, A4>> 1413 base::Tuple<>, base::Tuple<A1, A2, A3, A4>>
1304 (function, MakeTuple()); 1414 (function, base::MakeTuple());
1305 return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t); 1415 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
1306 } 1416 }
1307 1417
1308 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 1418 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1309 template <typename R, typename T, typename U, typename A1, typename A2, 1419 template <typename R, typename T, typename U, typename A1, typename A2,
1310 typename A3, typename A4> 1420 typename A3, typename A4>
1311 inline MutantFunctor<R, Tuple<A1, A2, A3, A4>> 1421 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
1312 CreateFunctor(T** obj, R (U::*method)(A1, A2, A3, A4)) { 1422 CreateFunctor(T** obj, R (U::*method)(A1, A2, A3, A4)) {
1313 MutantRunner<R, Tuple<A1, A2, A3, A4>>* t = 1423 MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
1314 new MutantLateObjectBind<R, T, R (U::*)(A1, A2, A3, A4), 1424 new MutantLateObjectBind<R, T, R (U::*)(A1, A2, A3, A4),
1315 Tuple<>, Tuple<A1, A2, A3, A4>> 1425 base::Tuple<>, base::Tuple<A1, A2, A3, A4>>
1316 (obj, method, MakeTuple()); 1426 (obj, method, base::MakeTuple());
1317 return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t); 1427 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
1318 } 1428 }
1319 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 1429 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1320 1430
1321 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 1431 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
1322 template <typename R, typename T, typename U, typename A1, typename A2, 1432 template <typename R, typename T, typename U, typename A1, typename A2,
1323 typename A3, typename A4> 1433 typename A3, typename A4>
1324 inline MutantFunctor<R, Tuple<A1, A2, A3, A4>> 1434 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
1325 CreateFunctor(T* obj, R (__stdcall U::*method)(A1, A2, A3, A4)) { 1435 CreateFunctor(T* obj, R (__stdcall U::*method)(A1, A2, A3, A4)) {
1326 MutantRunner<R, Tuple<A1, A2, A3, A4>>* t = 1436 MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
1327 new Mutant<R, T, R (__stdcall U::*)(A1, A2, A3, A4), 1437 new Mutant<R, T, R (__stdcall U::*)(A1, A2, A3, A4),
1328 Tuple<>, Tuple<A1, A2, A3, A4>> 1438 base::Tuple<>, base::Tuple<A1, A2, A3, A4>>
1329 (obj, method, MakeTuple()); 1439 (obj, method, base::MakeTuple());
1330 return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t); 1440 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
1331 } 1441 }
1332 1442
1333 template <typename R, typename A1, typename A2, typename A3, typename A4> 1443 template <typename R, typename A1, typename A2, typename A3, typename A4>
1334 inline MutantFunctor<R, Tuple<A1, A2, A3, A4>> 1444 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
1335 CreateFunctor(R (__stdcall *function)(A1, A2, A3, A4)) { 1445 CreateFunctor(R (__stdcall *function)(A1, A2, A3, A4)) {
1336 MutantRunner<R, Tuple<A1, A2, A3, A4>>* t = 1446 MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
1337 new MutantFunction<R, R (__stdcall *)(A1, A2, A3, A4), 1447 new MutantFunction<R, R (__stdcall *)(A1, A2, A3, A4),
1338 Tuple<>, Tuple<A1, A2, A3, A4>> 1448 base::Tuple<>, base::Tuple<A1, A2, A3, A4>>
1339 (function, MakeTuple()); 1449 (function, base::MakeTuple());
1340 return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t); 1450 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
1341 } 1451 }
1342 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 1452 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1343 template <typename R, typename T, typename U, typename A1, typename A2, 1453 template <typename R, typename T, typename U, typename A1, typename A2,
1344 typename A3, typename A4> 1454 typename A3, typename A4>
1345 inline MutantFunctor<R, Tuple<A1, A2, A3, A4>> 1455 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
1346 CreateFunctor(T** obj, R (__stdcall U::*method)(A1, A2, A3, A4)) { 1456 CreateFunctor(T** obj, R (__stdcall U::*method)(A1, A2, A3, A4)) {
1347 MutantRunner<R, Tuple<A1, A2, A3, A4>>* t = 1457 MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
1348 new MutantLateObjectBind<R, T, R (__stdcall U::*)(A1, A2, A3, A4), 1458 new MutantLateObjectBind<R, T, R (__stdcall U::*)(A1, A2, A3, A4),
1349 Tuple<>, Tuple<A1, A2, A3, A4>> 1459 base::Tuple<>, base::Tuple<A1, A2, A3, A4>>
1350 (obj, method, MakeTuple()); 1460 (obj, method, base::MakeTuple());
1351 return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t); 1461 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
1352 } 1462 }
1353 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 1463 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1354 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 1464 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
1355 1465
1356 // 0 - 5 1466 // 0 - 5
1357 template <typename R, typename T, typename U, typename A1, typename A2, 1467 template <typename R, typename T, typename U, typename A1, typename A2,
1358 typename A3, typename A4, typename A5> 1468 typename A3, typename A4, typename A5>
1359 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>> 1469 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
1360 CreateFunctor(T* obj, R (U::*method)(A1, A2, A3, A4, A5)) { 1470 CreateFunctor(T* obj, R (U::*method)(A1, A2, A3, A4, A5)) {
1361 MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t = 1471 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
1362 new Mutant<R, T, R (U::*)(A1, A2, A3, A4, A5), 1472 new Mutant<R, T, R (U::*)(A1, A2, A3, A4, A5),
1363 Tuple<>, Tuple<A1, A2, A3, A4, A5>> 1473 base::Tuple<>, base::Tuple<A1, A2, A3, A4, A5>>
1364 (obj, method, MakeTuple()); 1474 (obj, method, base::MakeTuple());
1365 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t); 1475 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
1366 } 1476 }
1367 1477
1368 template <typename R, typename A1, typename A2, typename A3, typename A4, 1478 template <typename R, typename A1, typename A2, typename A3, typename A4,
1369 typename A5> 1479 typename A5>
1370 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>> 1480 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
1371 CreateFunctor(R (*function)(A1, A2, A3, A4, A5)) { 1481 CreateFunctor(R (*function)(A1, A2, A3, A4, A5)) {
1372 MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t = 1482 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
1373 new MutantFunction<R, R (*)(A1, A2, A3, A4, A5), 1483 new MutantFunction<R, R (*)(A1, A2, A3, A4, A5),
1374 Tuple<>, Tuple<A1, A2, A3, A4, A5>> 1484 base::Tuple<>, base::Tuple<A1, A2, A3, A4, A5>>
1375 (function, MakeTuple()); 1485 (function, base::MakeTuple());
1376 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t); 1486 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
1377 } 1487 }
1378 1488
1379 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 1489 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1380 template <typename R, typename T, typename U, typename A1, typename A2, 1490 template <typename R, typename T, typename U, typename A1, typename A2,
1381 typename A3, typename A4, typename A5> 1491 typename A3, typename A4, typename A5>
1382 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>> 1492 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
1383 CreateFunctor(T** obj, R (U::*method)(A1, A2, A3, A4, A5)) { 1493 CreateFunctor(T** obj, R (U::*method)(A1, A2, A3, A4, A5)) {
1384 MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t = 1494 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
1385 new MutantLateObjectBind<R, T, R (U::*)(A1, A2, A3, A4, A5), 1495 new MutantLateObjectBind<R, T, R (U::*)(A1, A2, A3, A4, A5),
1386 Tuple<>, Tuple<A1, A2, A3, A4, A5>> 1496 base::Tuple<>, base::Tuple<A1, A2, A3, A4, A5>>
1387 (obj, method, MakeTuple()); 1497 (obj, method, base::MakeTuple());
1388 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t); 1498 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
1389 } 1499 }
1390 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 1500 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1391 1501
1392 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 1502 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
1393 template <typename R, typename T, typename U, typename A1, typename A2, 1503 template <typename R, typename T, typename U, typename A1, typename A2,
1394 typename A3, typename A4, typename A5> 1504 typename A3, typename A4, typename A5>
1395 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>> 1505 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
1396 CreateFunctor(T* obj, R (__stdcall U::*method)(A1, A2, A3, A4, A5)) { 1506 CreateFunctor(T* obj, R (__stdcall U::*method)(A1, A2, A3, A4, A5)) {
1397 MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t = 1507 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
1398 new Mutant<R, T, R (__stdcall U::*)(A1, A2, A3, A4, A5), 1508 new Mutant<R, T, R (__stdcall U::*)(A1, A2, A3, A4, A5),
1399 Tuple<>, Tuple<A1, A2, A3, A4, A5>> 1509 base::Tuple<>, base::Tuple<A1, A2, A3, A4, A5>>
1400 (obj, method, MakeTuple()); 1510 (obj, method, base::MakeTuple());
1401 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t); 1511 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
1402 } 1512 }
1403 1513
1404 template <typename R, typename A1, typename A2, typename A3, typename A4, 1514 template <typename R, typename A1, typename A2, typename A3, typename A4,
1405 typename A5> 1515 typename A5>
1406 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>> 1516 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
1407 CreateFunctor(R (__stdcall *function)(A1, A2, A3, A4, A5)) { 1517 CreateFunctor(R (__stdcall *function)(A1, A2, A3, A4, A5)) {
1408 MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t = 1518 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
1409 new MutantFunction<R, R (__stdcall *)(A1, A2, A3, A4, A5), 1519 new MutantFunction<R, R (__stdcall *)(A1, A2, A3, A4, A5),
1410 Tuple<>, Tuple<A1, A2, A3, A4, A5>> 1520 base::Tuple<>, base::Tuple<A1, A2, A3, A4, A5>>
1411 (function, MakeTuple()); 1521 (function, base::MakeTuple());
1412 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t); 1522 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
1413 } 1523 }
1414 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 1524 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1415 template <typename R, typename T, typename U, typename A1, typename A2, 1525 template <typename R, typename T, typename U, typename A1, typename A2,
1416 typename A3, typename A4, typename A5> 1526 typename A3, typename A4, typename A5>
1417 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>> 1527 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
1418 CreateFunctor(T** obj, R (__stdcall U::*method)(A1, A2, A3, A4, A5)) { 1528 CreateFunctor(T** obj, R (__stdcall U::*method)(A1, A2, A3, A4, A5)) {
1419 MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t = 1529 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
1420 new MutantLateObjectBind<R, T, R (__stdcall U::*)(A1, A2, A3, A4, A5), 1530 new MutantLateObjectBind<R, T, R (__stdcall U::*)(A1, A2, A3, A4, A5),
1421 Tuple<>, Tuple<A1, A2, A3, A4, A5>> 1531 base::Tuple<>, base::Tuple<A1, A2, A3, A4, A5>>
1422 (obj, method, MakeTuple()); 1532 (obj, method, base::MakeTuple());
1423 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t); 1533 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
1424 } 1534 }
1425 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 1535 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1426 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 1536 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
1427 1537
1428 // 0 - 6 1538 // 0 - 6
1429 template <typename R, typename T, typename U, typename A1, typename A2, 1539 template <typename R, typename T, typename U, typename A1, typename A2,
1430 typename A3, typename A4, typename A5, typename A6> 1540 typename A3, typename A4, typename A5, typename A6>
1431 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>> 1541 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
1432 CreateFunctor(T* obj, R (U::*method)(A1, A2, A3, A4, A5, A6)) { 1542 CreateFunctor(T* obj, R (U::*method)(A1, A2, A3, A4, A5, A6)) {
1433 MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t = 1543 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
1434 new Mutant<R, T, R (U::*)(A1, A2, A3, A4, A5, A6), 1544 new Mutant<R, T, R (U::*)(A1, A2, A3, A4, A5, A6),
1435 Tuple<>, Tuple<A1, A2, A3, A4, A5, A6>> 1545 base::Tuple<>, base::Tuple<A1, A2, A3, A4, A5, A6>>
1436 (obj, method, MakeTuple()); 1546 (obj, method, base::MakeTuple());
1437 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t); 1547 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
1438 } 1548 }
1439 1549
1440 template <typename R, typename A1, typename A2, typename A3, typename A4, 1550 template <typename R, typename A1, typename A2, typename A3, typename A4,
1441 typename A5, typename A6> 1551 typename A5, typename A6>
1442 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>> 1552 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
1443 CreateFunctor(R (*function)(A1, A2, A3, A4, A5, A6)) { 1553 CreateFunctor(R (*function)(A1, A2, A3, A4, A5, A6)) {
1444 MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t = 1554 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
1445 new MutantFunction<R, R (*)(A1, A2, A3, A4, A5, A6), 1555 new MutantFunction<R, R (*)(A1, A2, A3, A4, A5, A6),
1446 Tuple<>, Tuple<A1, A2, A3, A4, A5, A6>> 1556 base::Tuple<>, base::Tuple<A1, A2, A3, A4, A5, A6>>
1447 (function, MakeTuple()); 1557 (function, base::MakeTuple());
1448 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t); 1558 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
1449 } 1559 }
1450 1560
1451 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 1561 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1452 template <typename R, typename T, typename U, typename A1, typename A2, 1562 template <typename R, typename T, typename U, typename A1, typename A2,
1453 typename A3, typename A4, typename A5, typename A6> 1563 typename A3, typename A4, typename A5, typename A6>
1454 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>> 1564 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
1455 CreateFunctor(T** obj, R (U::*method)(A1, A2, A3, A4, A5, A6)) { 1565 CreateFunctor(T** obj, R (U::*method)(A1, A2, A3, A4, A5, A6)) {
1456 MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t = 1566 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
1457 new MutantLateObjectBind<R, T, R (U::*)(A1, A2, A3, A4, A5, A6), 1567 new MutantLateObjectBind<R, T, R (U::*)(A1, A2, A3, A4, A5, A6),
1458 Tuple<>, Tuple<A1, A2, A3, A4, A5, A6>> 1568 base::Tuple<>, base::Tuple<A1, A2, A3, A4, A5, A6>>
1459 (obj, method, MakeTuple()); 1569 (obj, method, base::MakeTuple());
1460 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t); 1570 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
1461 } 1571 }
1462 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 1572 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1463 1573
1464 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 1574 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
1465 template <typename R, typename T, typename U, typename A1, typename A2, 1575 template <typename R, typename T, typename U, typename A1, typename A2,
1466 typename A3, typename A4, typename A5, typename A6> 1576 typename A3, typename A4, typename A5, typename A6>
1467 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>> 1577 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
1468 CreateFunctor(T* obj, R (__stdcall U::*method)(A1, A2, A3, A4, A5, A6)) { 1578 CreateFunctor(T* obj, R (__stdcall U::*method)(A1, A2, A3, A4, A5, A6)) {
1469 MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t = 1579 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
1470 new Mutant<R, T, R (__stdcall U::*)(A1, A2, A3, A4, A5, A6), 1580 new Mutant<R, T, R (__stdcall U::*)(A1, A2, A3, A4, A5, A6),
1471 Tuple<>, Tuple<A1, A2, A3, A4, A5, A6>> 1581 base::Tuple<>, base::Tuple<A1, A2, A3, A4, A5, A6>>
1472 (obj, method, MakeTuple()); 1582 (obj, method, base::MakeTuple());
1473 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t); 1583 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
1474 } 1584 }
1475 1585
1476 template <typename R, typename A1, typename A2, typename A3, typename A4, 1586 template <typename R, typename A1, typename A2, typename A3, typename A4,
1477 typename A5, typename A6> 1587 typename A5, typename A6>
1478 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>> 1588 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
1479 CreateFunctor(R (__stdcall *function)(A1, A2, A3, A4, A5, A6)) { 1589 CreateFunctor(R (__stdcall *function)(A1, A2, A3, A4, A5, A6)) {
1480 MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t = 1590 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
1481 new MutantFunction<R, R (__stdcall *)(A1, A2, A3, A4, A5, A6), 1591 new MutantFunction<R, R (__stdcall *)(A1, A2, A3, A4, A5, A6),
1482 Tuple<>, Tuple<A1, A2, A3, A4, A5, A6>> 1592 base::Tuple<>, base::Tuple<A1, A2, A3, A4, A5, A6>>
1483 (function, MakeTuple()); 1593 (function, base::MakeTuple());
1484 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t); 1594 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
1485 } 1595 }
1486 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 1596 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1487 template <typename R, typename T, typename U, typename A1, typename A2, 1597 template <typename R, typename T, typename U, typename A1, typename A2,
1488 typename A3, typename A4, typename A5, typename A6> 1598 typename A3, typename A4, typename A5, typename A6>
1489 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>> 1599 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
1490 CreateFunctor(T** obj, R (__stdcall U::*method)(A1, A2, A3, A4, A5, A6)) { 1600 CreateFunctor(T** obj, R (__stdcall U::*method)(A1, A2, A3, A4, A5, A6)) {
1491 MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t = 1601 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
1492 new MutantLateObjectBind<R, T, R (__stdcall U::*)(A1, A2, A3, A4, A5, A6), 1602 new MutantLateObjectBind<R, T, R (__stdcall U::*)(A1, A2, A3, A4, A5, A6),
1493 Tuple<>, Tuple<A1, A2, A3, A4, A5, A6>> 1603 base::Tuple<>, base::Tuple<A1, A2, A3, A4, A5, A6>>
1494 (obj, method, MakeTuple()); 1604 (obj, method, base::MakeTuple());
1495 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t); 1605 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
1496 } 1606 }
1497 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 1607 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1498 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 1608 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
1499 1609
1500 // 1 - 0 1610 // 1 - 0
1501 template <typename R, typename T, typename U, typename P1, typename X1> 1611 template <typename R, typename T, typename U, typename P1, typename X1>
1502 inline MutantFunctor<R, Tuple<>> 1612 inline MutantFunctor<R, base::Tuple<>>
1503 CreateFunctor(T* obj, R (U::*method)(X1), const P1& p1) { 1613 CreateFunctor(T* obj, R (U::*method)(X1), const P1& p1) {
1504 MutantRunner<R, Tuple<>>* t = 1614 MutantRunner<R, base::Tuple<>>* t =
1505 new Mutant<R, T, R (U::*)(X1), 1615 new Mutant<R, T, R (U::*)(X1),
1506 Tuple<P1>, Tuple<>> 1616 base::Tuple<P1>, base::Tuple<>>
1507 (obj, method, MakeTuple(p1)); 1617 (obj, method, base::MakeTuple(p1));
1508 return MutantFunctor<R, Tuple<>>(t); 1618 return MutantFunctor<R, base::Tuple<>>(t);
1509 } 1619 }
1510 1620
1511 template <typename R, typename P1, typename X1> 1621 template <typename R, typename P1, typename X1>
1512 inline MutantFunctor<R, Tuple<>> 1622 inline MutantFunctor<R, base::Tuple<>>
1513 CreateFunctor(R (*function)(X1), const P1& p1) { 1623 CreateFunctor(R (*function)(X1), const P1& p1) {
1514 MutantRunner<R, Tuple<>>* t = 1624 MutantRunner<R, base::Tuple<>>* t =
1515 new MutantFunction<R, R (*)(X1), 1625 new MutantFunction<R, R (*)(X1),
1516 Tuple<P1>, Tuple<>> 1626 base::Tuple<P1>, base::Tuple<>>
1517 (function, MakeTuple(p1)); 1627 (function, base::MakeTuple(p1));
1518 return MutantFunctor<R, Tuple<>>(t); 1628 return MutantFunctor<R, base::Tuple<>>(t);
1519 } 1629 }
1520 1630
1521 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 1631 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1522 template <typename R, typename T, typename U, typename P1, typename X1> 1632 template <typename R, typename T, typename U, typename P1, typename X1>
1523 inline MutantFunctor<R, Tuple<>> 1633 inline MutantFunctor<R, base::Tuple<>>
1524 CreateFunctor(T** obj, R (U::*method)(X1), const P1& p1) { 1634 CreateFunctor(T** obj, R (U::*method)(X1), const P1& p1) {
1525 MutantRunner<R, Tuple<>>* t = 1635 MutantRunner<R, base::Tuple<>>* t =
1526 new MutantLateObjectBind<R, T, R (U::*)(X1), 1636 new MutantLateObjectBind<R, T, R (U::*)(X1),
1527 Tuple<P1>, Tuple<>> 1637 base::Tuple<P1>, base::Tuple<>>
1528 (obj, method, MakeTuple(p1)); 1638 (obj, method, base::MakeTuple(p1));
1529 return MutantFunctor<R, Tuple<>>(t); 1639 return MutantFunctor<R, base::Tuple<>>(t);
1530 } 1640 }
1531 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 1641 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1532 1642
1533 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 1643 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
1534 template <typename R, typename T, typename U, typename P1, typename X1> 1644 template <typename R, typename T, typename U, typename P1, typename X1>
1535 inline MutantFunctor<R, Tuple<>> 1645 inline MutantFunctor<R, base::Tuple<>>
1536 CreateFunctor(T* obj, R (__stdcall U::*method)(X1), const P1& p1) { 1646 CreateFunctor(T* obj, R (__stdcall U::*method)(X1), const P1& p1) {
1537 MutantRunner<R, Tuple<>>* t = 1647 MutantRunner<R, base::Tuple<>>* t =
1538 new Mutant<R, T, R (__stdcall U::*)(X1), 1648 new Mutant<R, T, R (__stdcall U::*)(X1),
1539 Tuple<P1>, Tuple<>> 1649 base::Tuple<P1>, base::Tuple<>>
1540 (obj, method, MakeTuple(p1)); 1650 (obj, method, base::MakeTuple(p1));
1541 return MutantFunctor<R, Tuple<>>(t); 1651 return MutantFunctor<R, base::Tuple<>>(t);
1542 } 1652 }
1543 1653
1544 template <typename R, typename P1, typename X1> 1654 template <typename R, typename P1, typename X1>
1545 inline MutantFunctor<R, Tuple<>> 1655 inline MutantFunctor<R, base::Tuple<>>
1546 CreateFunctor(R (__stdcall *function)(X1), const P1& p1) { 1656 CreateFunctor(R (__stdcall *function)(X1), const P1& p1) {
1547 MutantRunner<R, Tuple<>>* t = 1657 MutantRunner<R, base::Tuple<>>* t =
1548 new MutantFunction<R, R (__stdcall *)(X1), 1658 new MutantFunction<R, R (__stdcall *)(X1),
1549 Tuple<P1>, Tuple<>> 1659 base::Tuple<P1>, base::Tuple<>>
1550 (function, MakeTuple(p1)); 1660 (function, base::MakeTuple(p1));
1551 return MutantFunctor<R, Tuple<>>(t); 1661 return MutantFunctor<R, base::Tuple<>>(t);
1552 } 1662 }
1553 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 1663 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1554 template <typename R, typename T, typename U, typename P1, typename X1> 1664 template <typename R, typename T, typename U, typename P1, typename X1>
1555 inline MutantFunctor<R, Tuple<>> 1665 inline MutantFunctor<R, base::Tuple<>>
1556 CreateFunctor(T** obj, R (__stdcall U::*method)(X1), const P1& p1) { 1666 CreateFunctor(T** obj, R (__stdcall U::*method)(X1), const P1& p1) {
1557 MutantRunner<R, Tuple<>>* t = 1667 MutantRunner<R, base::Tuple<>>* t =
1558 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1), 1668 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1),
1559 Tuple<P1>, Tuple<>> 1669 base::Tuple<P1>, base::Tuple<>>
1560 (obj, method, MakeTuple(p1)); 1670 (obj, method, base::MakeTuple(p1));
1561 return MutantFunctor<R, Tuple<>>(t); 1671 return MutantFunctor<R, base::Tuple<>>(t);
1562 } 1672 }
1563 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 1673 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1564 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 1674 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
1565 1675
1566 // 1 - 1 1676 // 1 - 1
1567 template <typename R, typename T, typename U, typename P1, typename A1, 1677 template <typename R, typename T, typename U, typename P1, typename A1,
1568 typename X1> 1678 typename X1>
1569 inline MutantFunctor<R, Tuple<A1>> 1679 inline MutantFunctor<R, base::Tuple<A1>>
1570 CreateFunctor(T* obj, R (U::*method)(X1, A1), const P1& p1) { 1680 CreateFunctor(T* obj, R (U::*method)(X1, A1), const P1& p1) {
1571 MutantRunner<R, Tuple<A1>>* t = 1681 MutantRunner<R, base::Tuple<A1>>* t =
1572 new Mutant<R, T, R (U::*)(X1, A1), 1682 new Mutant<R, T, R (U::*)(X1, A1),
1573 Tuple<P1>, Tuple<A1>> 1683 base::Tuple<P1>, base::Tuple<A1>>
1574 (obj, method, MakeTuple(p1)); 1684 (obj, method, base::MakeTuple(p1));
1575 return MutantFunctor<R, Tuple<A1>>(t); 1685 return MutantFunctor<R, base::Tuple<A1>>(t);
1576 } 1686 }
1577 1687
1578 template <typename R, typename P1, typename A1, typename X1> 1688 template <typename R, typename P1, typename A1, typename X1>
1579 inline MutantFunctor<R, Tuple<A1>> 1689 inline MutantFunctor<R, base::Tuple<A1>>
1580 CreateFunctor(R (*function)(X1, A1), const P1& p1) { 1690 CreateFunctor(R (*function)(X1, A1), const P1& p1) {
1581 MutantRunner<R, Tuple<A1>>* t = 1691 MutantRunner<R, base::Tuple<A1>>* t =
1582 new MutantFunction<R, R (*)(X1, A1), 1692 new MutantFunction<R, R (*)(X1, A1),
1583 Tuple<P1>, Tuple<A1>> 1693 base::Tuple<P1>, base::Tuple<A1>>
1584 (function, MakeTuple(p1)); 1694 (function, base::MakeTuple(p1));
1585 return MutantFunctor<R, Tuple<A1>>(t); 1695 return MutantFunctor<R, base::Tuple<A1>>(t);
1586 } 1696 }
1587 1697
1588 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 1698 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1589 template <typename R, typename T, typename U, typename P1, typename A1, 1699 template <typename R, typename T, typename U, typename P1, typename A1,
1590 typename X1> 1700 typename X1>
1591 inline MutantFunctor<R, Tuple<A1>> 1701 inline MutantFunctor<R, base::Tuple<A1>>
1592 CreateFunctor(T** obj, R (U::*method)(X1, A1), const P1& p1) { 1702 CreateFunctor(T** obj, R (U::*method)(X1, A1), const P1& p1) {
1593 MutantRunner<R, Tuple<A1>>* t = 1703 MutantRunner<R, base::Tuple<A1>>* t =
1594 new MutantLateObjectBind<R, T, R (U::*)(X1, A1), 1704 new MutantLateObjectBind<R, T, R (U::*)(X1, A1),
1595 Tuple<P1>, Tuple<A1>> 1705 base::Tuple<P1>, base::Tuple<A1>>
1596 (obj, method, MakeTuple(p1)); 1706 (obj, method, base::MakeTuple(p1));
1597 return MutantFunctor<R, Tuple<A1>>(t); 1707 return MutantFunctor<R, base::Tuple<A1>>(t);
1598 } 1708 }
1599 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 1709 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1600 1710
1601 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 1711 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
1602 template <typename R, typename T, typename U, typename P1, typename A1, 1712 template <typename R, typename T, typename U, typename P1, typename A1,
1603 typename X1> 1713 typename X1>
1604 inline MutantFunctor<R, Tuple<A1>> 1714 inline MutantFunctor<R, base::Tuple<A1>>
1605 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, A1), const P1& p1) { 1715 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, A1), const P1& p1) {
1606 MutantRunner<R, Tuple<A1>>* t = 1716 MutantRunner<R, base::Tuple<A1>>* t =
1607 new Mutant<R, T, R (__stdcall U::*)(X1, A1), 1717 new Mutant<R, T, R (__stdcall U::*)(X1, A1),
1608 Tuple<P1>, Tuple<A1>> 1718 base::Tuple<P1>, base::Tuple<A1>>
1609 (obj, method, MakeTuple(p1)); 1719 (obj, method, base::MakeTuple(p1));
1610 return MutantFunctor<R, Tuple<A1>>(t); 1720 return MutantFunctor<R, base::Tuple<A1>>(t);
1611 } 1721 }
1612 1722
1613 template <typename R, typename P1, typename A1, typename X1> 1723 template <typename R, typename P1, typename A1, typename X1>
1614 inline MutantFunctor<R, Tuple<A1>> 1724 inline MutantFunctor<R, base::Tuple<A1>>
1615 CreateFunctor(R (__stdcall *function)(X1, A1), const P1& p1) { 1725 CreateFunctor(R (__stdcall *function)(X1, A1), const P1& p1) {
1616 MutantRunner<R, Tuple<A1>>* t = 1726 MutantRunner<R, base::Tuple<A1>>* t =
1617 new MutantFunction<R, R (__stdcall *)(X1, A1), 1727 new MutantFunction<R, R (__stdcall *)(X1, A1),
1618 Tuple<P1>, Tuple<A1>> 1728 base::Tuple<P1>, base::Tuple<A1>>
1619 (function, MakeTuple(p1)); 1729 (function, base::MakeTuple(p1));
1620 return MutantFunctor<R, Tuple<A1>>(t); 1730 return MutantFunctor<R, base::Tuple<A1>>(t);
1621 } 1731 }
1622 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 1732 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1623 template <typename R, typename T, typename U, typename P1, typename A1, 1733 template <typename R, typename T, typename U, typename P1, typename A1,
1624 typename X1> 1734 typename X1>
1625 inline MutantFunctor<R, Tuple<A1>> 1735 inline MutantFunctor<R, base::Tuple<A1>>
1626 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, A1), const P1& p1) { 1736 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, A1), const P1& p1) {
1627 MutantRunner<R, Tuple<A1>>* t = 1737 MutantRunner<R, base::Tuple<A1>>* t =
1628 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, A1), 1738 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, A1),
1629 Tuple<P1>, Tuple<A1>> 1739 base::Tuple<P1>, base::Tuple<A1>>
1630 (obj, method, MakeTuple(p1)); 1740 (obj, method, base::MakeTuple(p1));
1631 return MutantFunctor<R, Tuple<A1>>(t); 1741 return MutantFunctor<R, base::Tuple<A1>>(t);
1632 } 1742 }
1633 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 1743 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1634 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 1744 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
1635 1745
1636 // 1 - 2 1746 // 1 - 2
1637 template <typename R, typename T, typename U, typename P1, typename A1, 1747 template <typename R, typename T, typename U, typename P1, typename A1,
1638 typename A2, typename X1> 1748 typename A2, typename X1>
1639 inline MutantFunctor<R, Tuple<A1, A2>> 1749 inline MutantFunctor<R, base::Tuple<A1, A2>>
1640 CreateFunctor(T* obj, R (U::*method)(X1, A1, A2), const P1& p1) { 1750 CreateFunctor(T* obj, R (U::*method)(X1, A1, A2), const P1& p1) {
1641 MutantRunner<R, Tuple<A1, A2>>* t = 1751 MutantRunner<R, base::Tuple<A1, A2>>* t =
1642 new Mutant<R, T, R (U::*)(X1, A1, A2), 1752 new Mutant<R, T, R (U::*)(X1, A1, A2),
1643 Tuple<P1>, Tuple<A1, A2>> 1753 base::Tuple<P1>, base::Tuple<A1, A2>>
1644 (obj, method, MakeTuple(p1)); 1754 (obj, method, base::MakeTuple(p1));
1645 return MutantFunctor<R, Tuple<A1, A2>>(t); 1755 return MutantFunctor<R, base::Tuple<A1, A2>>(t);
1646 } 1756 }
1647 1757
1648 template <typename R, typename P1, typename A1, typename A2, typename X1> 1758 template <typename R, typename P1, typename A1, typename A2, typename X1>
1649 inline MutantFunctor<R, Tuple<A1, A2>> 1759 inline MutantFunctor<R, base::Tuple<A1, A2>>
1650 CreateFunctor(R (*function)(X1, A1, A2), const P1& p1) { 1760 CreateFunctor(R (*function)(X1, A1, A2), const P1& p1) {
1651 MutantRunner<R, Tuple<A1, A2>>* t = 1761 MutantRunner<R, base::Tuple<A1, A2>>* t =
1652 new MutantFunction<R, R (*)(X1, A1, A2), 1762 new MutantFunction<R, R (*)(X1, A1, A2),
1653 Tuple<P1>, Tuple<A1, A2>> 1763 base::Tuple<P1>, base::Tuple<A1, A2>>
1654 (function, MakeTuple(p1)); 1764 (function, base::MakeTuple(p1));
1655 return MutantFunctor<R, Tuple<A1, A2>>(t); 1765 return MutantFunctor<R, base::Tuple<A1, A2>>(t);
1656 } 1766 }
1657 1767
1658 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 1768 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1659 template <typename R, typename T, typename U, typename P1, typename A1, 1769 template <typename R, typename T, typename U, typename P1, typename A1,
1660 typename A2, typename X1> 1770 typename A2, typename X1>
1661 inline MutantFunctor<R, Tuple<A1, A2>> 1771 inline MutantFunctor<R, base::Tuple<A1, A2>>
1662 CreateFunctor(T** obj, R (U::*method)(X1, A1, A2), const P1& p1) { 1772 CreateFunctor(T** obj, R (U::*method)(X1, A1, A2), const P1& p1) {
1663 MutantRunner<R, Tuple<A1, A2>>* t = 1773 MutantRunner<R, base::Tuple<A1, A2>>* t =
1664 new MutantLateObjectBind<R, T, R (U::*)(X1, A1, A2), 1774 new MutantLateObjectBind<R, T, R (U::*)(X1, A1, A2),
1665 Tuple<P1>, Tuple<A1, A2>> 1775 base::Tuple<P1>, base::Tuple<A1, A2>>
1666 (obj, method, MakeTuple(p1)); 1776 (obj, method, base::MakeTuple(p1));
1667 return MutantFunctor<R, Tuple<A1, A2>>(t); 1777 return MutantFunctor<R, base::Tuple<A1, A2>>(t);
1668 } 1778 }
1669 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 1779 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1670 1780
1671 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 1781 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
1672 template <typename R, typename T, typename U, typename P1, typename A1, 1782 template <typename R, typename T, typename U, typename P1, typename A1,
1673 typename A2, typename X1> 1783 typename A2, typename X1>
1674 inline MutantFunctor<R, Tuple<A1, A2>> 1784 inline MutantFunctor<R, base::Tuple<A1, A2>>
1675 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, A1, A2), const P1& p1) { 1785 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, A1, A2), const P1& p1) {
1676 MutantRunner<R, Tuple<A1, A2>>* t = 1786 MutantRunner<R, base::Tuple<A1, A2>>* t =
1677 new Mutant<R, T, R (__stdcall U::*)(X1, A1, A2), 1787 new Mutant<R, T, R (__stdcall U::*)(X1, A1, A2),
1678 Tuple<P1>, Tuple<A1, A2>> 1788 base::Tuple<P1>, base::Tuple<A1, A2>>
1679 (obj, method, MakeTuple(p1)); 1789 (obj, method, base::MakeTuple(p1));
1680 return MutantFunctor<R, Tuple<A1, A2>>(t); 1790 return MutantFunctor<R, base::Tuple<A1, A2>>(t);
1681 } 1791 }
1682 1792
1683 template <typename R, typename P1, typename A1, typename A2, typename X1> 1793 template <typename R, typename P1, typename A1, typename A2, typename X1>
1684 inline MutantFunctor<R, Tuple<A1, A2>> 1794 inline MutantFunctor<R, base::Tuple<A1, A2>>
1685 CreateFunctor(R (__stdcall *function)(X1, A1, A2), const P1& p1) { 1795 CreateFunctor(R (__stdcall *function)(X1, A1, A2), const P1& p1) {
1686 MutantRunner<R, Tuple<A1, A2>>* t = 1796 MutantRunner<R, base::Tuple<A1, A2>>* t =
1687 new MutantFunction<R, R (__stdcall *)(X1, A1, A2), 1797 new MutantFunction<R, R (__stdcall *)(X1, A1, A2),
1688 Tuple<P1>, Tuple<A1, A2>> 1798 base::Tuple<P1>, base::Tuple<A1, A2>>
1689 (function, MakeTuple(p1)); 1799 (function, base::MakeTuple(p1));
1690 return MutantFunctor<R, Tuple<A1, A2>>(t); 1800 return MutantFunctor<R, base::Tuple<A1, A2>>(t);
1691 } 1801 }
1692 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 1802 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1693 template <typename R, typename T, typename U, typename P1, typename A1, 1803 template <typename R, typename T, typename U, typename P1, typename A1,
1694 typename A2, typename X1> 1804 typename A2, typename X1>
1695 inline MutantFunctor<R, Tuple<A1, A2>> 1805 inline MutantFunctor<R, base::Tuple<A1, A2>>
1696 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, A1, A2), const P1& p1) { 1806 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, A1, A2), const P1& p1) {
1697 MutantRunner<R, Tuple<A1, A2>>* t = 1807 MutantRunner<R, base::Tuple<A1, A2>>* t =
1698 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, A1, A2), 1808 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, A1, A2),
1699 Tuple<P1>, Tuple<A1, A2>> 1809 base::Tuple<P1>, base::Tuple<A1, A2>>
1700 (obj, method, MakeTuple(p1)); 1810 (obj, method, base::MakeTuple(p1));
1701 return MutantFunctor<R, Tuple<A1, A2>>(t); 1811 return MutantFunctor<R, base::Tuple<A1, A2>>(t);
1702 } 1812 }
1703 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 1813 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1704 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 1814 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
1705 1815
1706 // 1 - 3 1816 // 1 - 3
1707 template <typename R, typename T, typename U, typename P1, typename A1, 1817 template <typename R, typename T, typename U, typename P1, typename A1,
1708 typename A2, typename A3, typename X1> 1818 typename A2, typename A3, typename X1>
1709 inline MutantFunctor<R, Tuple<A1, A2, A3>> 1819 inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
1710 CreateFunctor(T* obj, R (U::*method)(X1, A1, A2, A3), const P1& p1) { 1820 CreateFunctor(T* obj, R (U::*method)(X1, A1, A2, A3), const P1& p1) {
1711 MutantRunner<R, Tuple<A1, A2, A3>>* t = 1821 MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
1712 new Mutant<R, T, R (U::*)(X1, A1, A2, A3), 1822 new Mutant<R, T, R (U::*)(X1, A1, A2, A3),
1713 Tuple<P1>, Tuple<A1, A2, A3>> 1823 base::Tuple<P1>, base::Tuple<A1, A2, A3>>
1714 (obj, method, MakeTuple(p1)); 1824 (obj, method, base::MakeTuple(p1));
1715 return MutantFunctor<R, Tuple<A1, A2, A3>>(t); 1825 return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
1716 } 1826 }
1717 1827
1718 template <typename R, typename P1, typename A1, typename A2, typename A3, 1828 template <typename R, typename P1, typename A1, typename A2, typename A3,
1719 typename X1> 1829 typename X1>
1720 inline MutantFunctor<R, Tuple<A1, A2, A3>> 1830 inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
1721 CreateFunctor(R (*function)(X1, A1, A2, A3), const P1& p1) { 1831 CreateFunctor(R (*function)(X1, A1, A2, A3), const P1& p1) {
1722 MutantRunner<R, Tuple<A1, A2, A3>>* t = 1832 MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
1723 new MutantFunction<R, R (*)(X1, A1, A2, A3), 1833 new MutantFunction<R, R (*)(X1, A1, A2, A3),
1724 Tuple<P1>, Tuple<A1, A2, A3>> 1834 base::Tuple<P1>, base::Tuple<A1, A2, A3>>
1725 (function, MakeTuple(p1)); 1835 (function, base::MakeTuple(p1));
1726 return MutantFunctor<R, Tuple<A1, A2, A3>>(t); 1836 return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
1727 } 1837 }
1728 1838
1729 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 1839 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1730 template <typename R, typename T, typename U, typename P1, typename A1, 1840 template <typename R, typename T, typename U, typename P1, typename A1,
1731 typename A2, typename A3, typename X1> 1841 typename A2, typename A3, typename X1>
1732 inline MutantFunctor<R, Tuple<A1, A2, A3>> 1842 inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
1733 CreateFunctor(T** obj, R (U::*method)(X1, A1, A2, A3), const P1& p1) { 1843 CreateFunctor(T** obj, R (U::*method)(X1, A1, A2, A3), const P1& p1) {
1734 MutantRunner<R, Tuple<A1, A2, A3>>* t = 1844 MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
1735 new MutantLateObjectBind<R, T, R (U::*)(X1, A1, A2, A3), 1845 new MutantLateObjectBind<R, T, R (U::*)(X1, A1, A2, A3),
1736 Tuple<P1>, Tuple<A1, A2, A3>> 1846 base::Tuple<P1>, base::Tuple<A1, A2, A3>>
1737 (obj, method, MakeTuple(p1)); 1847 (obj, method, base::MakeTuple(p1));
1738 return MutantFunctor<R, Tuple<A1, A2, A3>>(t); 1848 return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
1739 } 1849 }
1740 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 1850 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1741 1851
1742 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 1852 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
1743 template <typename R, typename T, typename U, typename P1, typename A1, 1853 template <typename R, typename T, typename U, typename P1, typename A1,
1744 typename A2, typename A3, typename X1> 1854 typename A2, typename A3, typename X1>
1745 inline MutantFunctor<R, Tuple<A1, A2, A3>> 1855 inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
1746 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, A1, A2, A3), const P1& p1) { 1856 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, A1, A2, A3), const P1& p1) {
1747 MutantRunner<R, Tuple<A1, A2, A3>>* t = 1857 MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
1748 new Mutant<R, T, R (__stdcall U::*)(X1, A1, A2, A3), 1858 new Mutant<R, T, R (__stdcall U::*)(X1, A1, A2, A3),
1749 Tuple<P1>, Tuple<A1, A2, A3>> 1859 base::Tuple<P1>, base::Tuple<A1, A2, A3>>
1750 (obj, method, MakeTuple(p1)); 1860 (obj, method, base::MakeTuple(p1));
1751 return MutantFunctor<R, Tuple<A1, A2, A3>>(t); 1861 return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
1752 } 1862 }
1753 1863
1754 template <typename R, typename P1, typename A1, typename A2, typename A3, 1864 template <typename R, typename P1, typename A1, typename A2, typename A3,
1755 typename X1> 1865 typename X1>
1756 inline MutantFunctor<R, Tuple<A1, A2, A3>> 1866 inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
1757 CreateFunctor(R (__stdcall *function)(X1, A1, A2, A3), const P1& p1) { 1867 CreateFunctor(R (__stdcall *function)(X1, A1, A2, A3), const P1& p1) {
1758 MutantRunner<R, Tuple<A1, A2, A3>>* t = 1868 MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
1759 new MutantFunction<R, R (__stdcall *)(X1, A1, A2, A3), 1869 new MutantFunction<R, R (__stdcall *)(X1, A1, A2, A3),
1760 Tuple<P1>, Tuple<A1, A2, A3>> 1870 base::Tuple<P1>, base::Tuple<A1, A2, A3>>
1761 (function, MakeTuple(p1)); 1871 (function, base::MakeTuple(p1));
1762 return MutantFunctor<R, Tuple<A1, A2, A3>>(t); 1872 return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
1763 } 1873 }
1764 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 1874 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1765 template <typename R, typename T, typename U, typename P1, typename A1, 1875 template <typename R, typename T, typename U, typename P1, typename A1,
1766 typename A2, typename A3, typename X1> 1876 typename A2, typename A3, typename X1>
1767 inline MutantFunctor<R, Tuple<A1, A2, A3>> 1877 inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
1768 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, A1, A2, A3), const P1& p1) { 1878 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, A1, A2, A3), const P1& p1) {
1769 MutantRunner<R, Tuple<A1, A2, A3>>* t = 1879 MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
1770 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, A1, A2, A3), 1880 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, A1, A2, A3),
1771 Tuple<P1>, Tuple<A1, A2, A3>> 1881 base::Tuple<P1>, base::Tuple<A1, A2, A3>>
1772 (obj, method, MakeTuple(p1)); 1882 (obj, method, base::MakeTuple(p1));
1773 return MutantFunctor<R, Tuple<A1, A2, A3>>(t); 1883 return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
1774 } 1884 }
1775 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 1885 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1776 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 1886 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
1777 1887
1778 // 1 - 4 1888 // 1 - 4
1779 template <typename R, typename T, typename U, typename P1, typename A1, 1889 template <typename R, typename T, typename U, typename P1, typename A1,
1780 typename A2, typename A3, typename A4, typename X1> 1890 typename A2, typename A3, typename A4, typename X1>
1781 inline MutantFunctor<R, Tuple<A1, A2, A3, A4>> 1891 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
1782 CreateFunctor(T* obj, R (U::*method)(X1, A1, A2, A3, A4), const P1& p1) { 1892 CreateFunctor(T* obj, R (U::*method)(X1, A1, A2, A3, A4), const P1& p1) {
1783 MutantRunner<R, Tuple<A1, A2, A3, A4>>* t = 1893 MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
1784 new Mutant<R, T, R (U::*)(X1, A1, A2, A3, A4), 1894 new Mutant<R, T, R (U::*)(X1, A1, A2, A3, A4),
1785 Tuple<P1>, Tuple<A1, A2, A3, A4>> 1895 base::Tuple<P1>, base::Tuple<A1, A2, A3, A4>>
1786 (obj, method, MakeTuple(p1)); 1896 (obj, method, base::MakeTuple(p1));
1787 return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t); 1897 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
1788 } 1898 }
1789 1899
1790 template <typename R, typename P1, typename A1, typename A2, typename A3, 1900 template <typename R, typename P1, typename A1, typename A2, typename A3,
1791 typename A4, typename X1> 1901 typename A4, typename X1>
1792 inline MutantFunctor<R, Tuple<A1, A2, A3, A4>> 1902 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
1793 CreateFunctor(R (*function)(X1, A1, A2, A3, A4), const P1& p1) { 1903 CreateFunctor(R (*function)(X1, A1, A2, A3, A4), const P1& p1) {
1794 MutantRunner<R, Tuple<A1, A2, A3, A4>>* t = 1904 MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
1795 new MutantFunction<R, R (*)(X1, A1, A2, A3, A4), 1905 new MutantFunction<R, R (*)(X1, A1, A2, A3, A4),
1796 Tuple<P1>, Tuple<A1, A2, A3, A4>> 1906 base::Tuple<P1>, base::Tuple<A1, A2, A3, A4>>
1797 (function, MakeTuple(p1)); 1907 (function, base::MakeTuple(p1));
1798 return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t); 1908 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
1799 } 1909 }
1800 1910
1801 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 1911 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1802 template <typename R, typename T, typename U, typename P1, typename A1, 1912 template <typename R, typename T, typename U, typename P1, typename A1,
1803 typename A2, typename A3, typename A4, typename X1> 1913 typename A2, typename A3, typename A4, typename X1>
1804 inline MutantFunctor<R, Tuple<A1, A2, A3, A4>> 1914 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
1805 CreateFunctor(T** obj, R (U::*method)(X1, A1, A2, A3, A4), const P1& p1) { 1915 CreateFunctor(T** obj, R (U::*method)(X1, A1, A2, A3, A4), const P1& p1) {
1806 MutantRunner<R, Tuple<A1, A2, A3, A4>>* t = 1916 MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
1807 new MutantLateObjectBind<R, T, R (U::*)(X1, A1, A2, A3, A4), 1917 new MutantLateObjectBind<R, T, R (U::*)(X1, A1, A2, A3, A4),
1808 Tuple<P1>, Tuple<A1, A2, A3, A4>> 1918 base::Tuple<P1>, base::Tuple<A1, A2, A3, A4>>
1809 (obj, method, MakeTuple(p1)); 1919 (obj, method, base::MakeTuple(p1));
1810 return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t); 1920 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
1811 } 1921 }
1812 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 1922 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1813 1923
1814 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 1924 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
1815 template <typename R, typename T, typename U, typename P1, typename A1, 1925 template <typename R, typename T, typename U, typename P1, typename A1,
1816 typename A2, typename A3, typename A4, typename X1> 1926 typename A2, typename A3, typename A4, typename X1>
1817 inline MutantFunctor<R, Tuple<A1, A2, A3, A4>> 1927 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
1818 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, A1, A2, A3, A4), 1928 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, A1, A2, A3, A4),
1819 const P1& p1) { 1929 const P1& p1) {
1820 MutantRunner<R, Tuple<A1, A2, A3, A4>>* t = 1930 MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
1821 new Mutant<R, T, R (__stdcall U::*)(X1, A1, A2, A3, A4), 1931 new Mutant<R, T, R (__stdcall U::*)(X1, A1, A2, A3, A4),
1822 Tuple<P1>, Tuple<A1, A2, A3, A4>> 1932 base::Tuple<P1>, base::Tuple<A1, A2, A3, A4>>
1823 (obj, method, MakeTuple(p1)); 1933 (obj, method, base::MakeTuple(p1));
1824 return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t); 1934 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
1825 } 1935 }
1826 1936
1827 template <typename R, typename P1, typename A1, typename A2, typename A3, 1937 template <typename R, typename P1, typename A1, typename A2, typename A3,
1828 typename A4, typename X1> 1938 typename A4, typename X1>
1829 inline MutantFunctor<R, Tuple<A1, A2, A3, A4>> 1939 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
1830 CreateFunctor(R (__stdcall *function)(X1, A1, A2, A3, A4), const P1& p1) { 1940 CreateFunctor(R (__stdcall *function)(X1, A1, A2, A3, A4), const P1& p1) {
1831 MutantRunner<R, Tuple<A1, A2, A3, A4>>* t = 1941 MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
1832 new MutantFunction<R, R (__stdcall *)(X1, A1, A2, A3, A4), 1942 new MutantFunction<R, R (__stdcall *)(X1, A1, A2, A3, A4),
1833 Tuple<P1>, Tuple<A1, A2, A3, A4>> 1943 base::Tuple<P1>, base::Tuple<A1, A2, A3, A4>>
1834 (function, MakeTuple(p1)); 1944 (function, base::MakeTuple(p1));
1835 return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t); 1945 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
1836 } 1946 }
1837 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 1947 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1838 template <typename R, typename T, typename U, typename P1, typename A1, 1948 template <typename R, typename T, typename U, typename P1, typename A1,
1839 typename A2, typename A3, typename A4, typename X1> 1949 typename A2, typename A3, typename A4, typename X1>
1840 inline MutantFunctor<R, Tuple<A1, A2, A3, A4>> 1950 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
1841 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, A1, A2, A3, A4), 1951 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, A1, A2, A3, A4),
1842 const P1& p1) { 1952 const P1& p1) {
1843 MutantRunner<R, Tuple<A1, A2, A3, A4>>* t = 1953 MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
1844 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, A1, A2, A3, A4), 1954 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, A1, A2, A3, A4),
1845 Tuple<P1>, Tuple<A1, A2, A3, A4>> 1955 base::Tuple<P1>, base::Tuple<A1, A2, A3, A4>>
1846 (obj, method, MakeTuple(p1)); 1956 (obj, method, base::MakeTuple(p1));
1847 return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t); 1957 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
1848 } 1958 }
1849 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 1959 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1850 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 1960 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
1851 1961
1852 // 1 - 5 1962 // 1 - 5
1853 template <typename R, typename T, typename U, typename P1, typename A1, 1963 template <typename R, typename T, typename U, typename P1, typename A1,
1854 typename A2, typename A3, typename A4, typename A5, typename X1> 1964 typename A2, typename A3, typename A4, typename A5, typename X1>
1855 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>> 1965 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
1856 CreateFunctor(T* obj, R (U::*method)(X1, A1, A2, A3, A4, A5), const P1& p1) { 1966 CreateFunctor(T* obj, R (U::*method)(X1, A1, A2, A3, A4, A5), const P1& p1) {
1857 MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t = 1967 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
1858 new Mutant<R, T, R (U::*)(X1, A1, A2, A3, A4, A5), 1968 new Mutant<R, T, R (U::*)(X1, A1, A2, A3, A4, A5),
1859 Tuple<P1>, Tuple<A1, A2, A3, A4, A5>> 1969 base::Tuple<P1>, base::Tuple<A1, A2, A3, A4, A5>>
1860 (obj, method, MakeTuple(p1)); 1970 (obj, method, base::MakeTuple(p1));
1861 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t); 1971 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
1862 } 1972 }
1863 1973
1864 template <typename R, typename P1, typename A1, typename A2, typename A3, 1974 template <typename R, typename P1, typename A1, typename A2, typename A3,
1865 typename A4, typename A5, typename X1> 1975 typename A4, typename A5, typename X1>
1866 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>> 1976 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
1867 CreateFunctor(R (*function)(X1, A1, A2, A3, A4, A5), const P1& p1) { 1977 CreateFunctor(R (*function)(X1, A1, A2, A3, A4, A5), const P1& p1) {
1868 MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t = 1978 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
1869 new MutantFunction<R, R (*)(X1, A1, A2, A3, A4, A5), 1979 new MutantFunction<R, R (*)(X1, A1, A2, A3, A4, A5),
1870 Tuple<P1>, Tuple<A1, A2, A3, A4, A5>> 1980 base::Tuple<P1>, base::Tuple<A1, A2, A3, A4, A5>>
1871 (function, MakeTuple(p1)); 1981 (function, base::MakeTuple(p1));
1872 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t); 1982 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
1873 } 1983 }
1874 1984
1875 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 1985 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1876 template <typename R, typename T, typename U, typename P1, typename A1, 1986 template <typename R, typename T, typename U, typename P1, typename A1,
1877 typename A2, typename A3, typename A4, typename A5, typename X1> 1987 typename A2, typename A3, typename A4, typename A5, typename X1>
1878 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>> 1988 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
1879 CreateFunctor(T** obj, R (U::*method)(X1, A1, A2, A3, A4, A5), const P1& p1) { 1989 CreateFunctor(T** obj, R (U::*method)(X1, A1, A2, A3, A4, A5), const P1& p1) {
1880 MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t = 1990 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
1881 new MutantLateObjectBind<R, T, R (U::*)(X1, A1, A2, A3, A4, A5), 1991 new MutantLateObjectBind<R, T, R (U::*)(X1, A1, A2, A3, A4, A5),
1882 Tuple<P1>, Tuple<A1, A2, A3, A4, A5>> 1992 base::Tuple<P1>, base::Tuple<A1, A2, A3, A4, A5>>
1883 (obj, method, MakeTuple(p1)); 1993 (obj, method, base::MakeTuple(p1));
1884 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t); 1994 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
1885 } 1995 }
1886 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 1996 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1887 1997
1888 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 1998 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
1889 template <typename R, typename T, typename U, typename P1, typename A1, 1999 template <typename R, typename T, typename U, typename P1, typename A1,
1890 typename A2, typename A3, typename A4, typename A5, typename X1> 2000 typename A2, typename A3, typename A4, typename A5, typename X1>
1891 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>> 2001 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
1892 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, A1, A2, A3, A4, A5), 2002 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, A1, A2, A3, A4, A5),
1893 const P1& p1) { 2003 const P1& p1) {
1894 MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t = 2004 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
1895 new Mutant<R, T, R (__stdcall U::*)(X1, A1, A2, A3, A4, A5), 2005 new Mutant<R, T, R (__stdcall U::*)(X1, A1, A2, A3, A4, A5),
1896 Tuple<P1>, Tuple<A1, A2, A3, A4, A5>> 2006 base::Tuple<P1>, base::Tuple<A1, A2, A3, A4, A5>>
1897 (obj, method, MakeTuple(p1)); 2007 (obj, method, base::MakeTuple(p1));
1898 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t); 2008 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
1899 } 2009 }
1900 2010
1901 template <typename R, typename P1, typename A1, typename A2, typename A3, 2011 template <typename R, typename P1, typename A1, typename A2, typename A3,
1902 typename A4, typename A5, typename X1> 2012 typename A4, typename A5, typename X1>
1903 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>> 2013 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
1904 CreateFunctor(R (__stdcall *function)(X1, A1, A2, A3, A4, A5), const P1& p1) { 2014 CreateFunctor(R (__stdcall *function)(X1, A1, A2, A3, A4, A5), const P1& p1) {
1905 MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t = 2015 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
1906 new MutantFunction<R, R (__stdcall *)(X1, A1, A2, A3, A4, A5), 2016 new MutantFunction<R, R (__stdcall *)(X1, A1, A2, A3, A4, A5),
1907 Tuple<P1>, Tuple<A1, A2, A3, A4, A5>> 2017 base::Tuple<P1>, base::Tuple<A1, A2, A3, A4, A5>>
1908 (function, MakeTuple(p1)); 2018 (function, base::MakeTuple(p1));
1909 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t); 2019 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
1910 } 2020 }
1911 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 2021 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1912 template <typename R, typename T, typename U, typename P1, typename A1, 2022 template <typename R, typename T, typename U, typename P1, typename A1,
1913 typename A2, typename A3, typename A4, typename A5, typename X1> 2023 typename A2, typename A3, typename A4, typename A5, typename X1>
1914 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>> 2024 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
1915 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, A1, A2, A3, A4, A5), 2025 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, A1, A2, A3, A4, A5),
1916 const P1& p1) { 2026 const P1& p1) {
1917 MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t = 2027 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
1918 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, A1, A2, A3, A4, A5), 2028 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, A1, A2, A3, A4, A5),
1919 Tuple<P1>, Tuple<A1, A2, A3, A4, A5>> 2029 base::Tuple<P1>, base::Tuple<A1, A2, A3, A4, A5>>
1920 (obj, method, MakeTuple(p1)); 2030 (obj, method, base::MakeTuple(p1));
1921 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t); 2031 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
1922 } 2032 }
1923 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 2033 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1924 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 2034 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
1925 2035
1926 // 1 - 6 2036 // 1 - 6
1927 template <typename R, typename T, typename U, typename P1, typename A1, 2037 template <typename R, typename T, typename U, typename P1, typename A1,
1928 typename A2, typename A3, typename A4, typename A5, typename A6, 2038 typename A2, typename A3, typename A4, typename A5, typename A6,
1929 typename X1> 2039 typename X1>
1930 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>> 2040 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
1931 CreateFunctor(T* obj, R (U::*method)(X1, A1, A2, A3, A4, A5, A6), 2041 CreateFunctor(T* obj, R (U::*method)(X1, A1, A2, A3, A4, A5, A6),
1932 const P1& p1) { 2042 const P1& p1) {
1933 MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t = 2043 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
1934 new Mutant<R, T, R (U::*)(X1, A1, A2, A3, A4, A5, A6), 2044 new Mutant<R, T, R (U::*)(X1, A1, A2, A3, A4, A5, A6),
1935 Tuple<P1>, Tuple<A1, A2, A3, A4, A5, A6>> 2045 base::Tuple<P1>, base::Tuple<A1, A2, A3, A4, A5, A6>>
1936 (obj, method, MakeTuple(p1)); 2046 (obj, method, base::MakeTuple(p1));
1937 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t); 2047 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
1938 } 2048 }
1939 2049
1940 template <typename R, typename P1, typename A1, typename A2, typename A3, 2050 template <typename R, typename P1, typename A1, typename A2, typename A3,
1941 typename A4, typename A5, typename A6, typename X1> 2051 typename A4, typename A5, typename A6, typename X1>
1942 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>> 2052 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
1943 CreateFunctor(R (*function)(X1, A1, A2, A3, A4, A5, A6), const P1& p1) { 2053 CreateFunctor(R (*function)(X1, A1, A2, A3, A4, A5, A6), const P1& p1) {
1944 MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t = 2054 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
1945 new MutantFunction<R, R (*)(X1, A1, A2, A3, A4, A5, A6), 2055 new MutantFunction<R, R (*)(X1, A1, A2, A3, A4, A5, A6),
1946 Tuple<P1>, Tuple<A1, A2, A3, A4, A5, A6>> 2056 base::Tuple<P1>, base::Tuple<A1, A2, A3, A4, A5, A6>>
1947 (function, MakeTuple(p1)); 2057 (function, base::MakeTuple(p1));
1948 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t); 2058 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
1949 } 2059 }
1950 2060
1951 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 2061 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1952 template <typename R, typename T, typename U, typename P1, typename A1, 2062 template <typename R, typename T, typename U, typename P1, typename A1,
1953 typename A2, typename A3, typename A4, typename A5, typename A6, 2063 typename A2, typename A3, typename A4, typename A5, typename A6,
1954 typename X1> 2064 typename X1>
1955 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>> 2065 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
1956 CreateFunctor(T** obj, R (U::*method)(X1, A1, A2, A3, A4, A5, A6), 2066 CreateFunctor(T** obj, R (U::*method)(X1, A1, A2, A3, A4, A5, A6),
1957 const P1& p1) { 2067 const P1& p1) {
1958 MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t = 2068 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
1959 new MutantLateObjectBind<R, T, R (U::*)(X1, A1, A2, A3, A4, A5, A6), 2069 new MutantLateObjectBind<R, T, R (U::*)(X1, A1, A2, A3, A4, A5, A6),
1960 Tuple<P1>, Tuple<A1, A2, A3, A4, A5, A6>> 2070 base::Tuple<P1>, base::Tuple<A1, A2, A3, A4, A5, A6>>
1961 (obj, method, MakeTuple(p1)); 2071 (obj, method, base::MakeTuple(p1));
1962 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t); 2072 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
1963 } 2073 }
1964 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 2074 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1965 2075
1966 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 2076 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
1967 template <typename R, typename T, typename U, typename P1, typename A1, 2077 template <typename R, typename T, typename U, typename P1, typename A1,
1968 typename A2, typename A3, typename A4, typename A5, typename A6, 2078 typename A2, typename A3, typename A4, typename A5, typename A6,
1969 typename X1> 2079 typename X1>
1970 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>> 2080 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
1971 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, A1, A2, A3, A4, A5, A6), 2081 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, A1, A2, A3, A4, A5, A6),
1972 const P1& p1) { 2082 const P1& p1) {
1973 MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t = 2083 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
1974 new Mutant<R, T, R (__stdcall U::*)(X1, A1, A2, A3, A4, A5, A6), 2084 new Mutant<R, T, R (__stdcall U::*)(X1, A1, A2, A3, A4, A5, A6),
1975 Tuple<P1>, Tuple<A1, A2, A3, A4, A5, A6>> 2085 base::Tuple<P1>, base::Tuple<A1, A2, A3, A4, A5, A6>>
1976 (obj, method, MakeTuple(p1)); 2086 (obj, method, base::MakeTuple(p1));
1977 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t); 2087 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
1978 } 2088 }
1979 2089
1980 template <typename R, typename P1, typename A1, typename A2, typename A3, 2090 template <typename R, typename P1, typename A1, typename A2, typename A3,
1981 typename A4, typename A5, typename A6, typename X1> 2091 typename A4, typename A5, typename A6, typename X1>
1982 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>> 2092 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
1983 CreateFunctor(R (__stdcall *function)(X1, A1, A2, A3, A4, A5, A6), 2093 CreateFunctor(R (__stdcall *function)(X1, A1, A2, A3, A4, A5, A6),
1984 const P1& p1) { 2094 const P1& p1) {
1985 MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t = 2095 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
1986 new MutantFunction<R, R (__stdcall *)(X1, A1, A2, A3, A4, A5, A6), 2096 new MutantFunction<R, R (__stdcall *)(X1, A1, A2, A3, A4, A5, A6),
1987 Tuple<P1>, Tuple<A1, A2, A3, A4, A5, A6>> 2097 base::Tuple<P1>, base::Tuple<A1, A2, A3, A4, A5, A6>>
1988 (function, MakeTuple(p1)); 2098 (function, base::MakeTuple(p1));
1989 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t); 2099 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
1990 } 2100 }
1991 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 2101 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1992 template <typename R, typename T, typename U, typename P1, typename A1, 2102 template <typename R, typename T, typename U, typename P1, typename A1,
1993 typename A2, typename A3, typename A4, typename A5, typename A6, 2103 typename A2, typename A3, typename A4, typename A5, typename A6,
1994 typename X1> 2104 typename X1>
1995 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>> 2105 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
1996 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, A1, A2, A3, A4, A5, A6), 2106 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, A1, A2, A3, A4, A5, A6),
1997 const P1& p1) { 2107 const P1& p1) {
1998 MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t = 2108 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
1999 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, A1, A2, A3, A4, A5, A6), 2109 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, A1, A2, A3, A4, A5, A6),
2000 Tuple<P1>, Tuple<A1, A2, A3, A4, A5, A6>> 2110 base::Tuple<P1>, base::Tuple<A1, A2, A3, A4, A5, A6>>
2001 (obj, method, MakeTuple(p1)); 2111 (obj, method, base::MakeTuple(p1));
2002 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t); 2112 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
2003 } 2113 }
2004 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 2114 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2005 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 2115 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
2006 2116
2007 // 2 - 0 2117 // 2 - 0
2008 template <typename R, typename T, typename U, typename P1, typename P2, 2118 template <typename R, typename T, typename U, typename P1, typename P2,
2009 typename X1, typename X2> 2119 typename X1, typename X2>
2010 inline MutantFunctor<R, Tuple<>> 2120 inline MutantFunctor<R, base::Tuple<>>
2011 CreateFunctor(T* obj, R (U::*method)(X1, X2), const P1& p1, const P2& p2) { 2121 CreateFunctor(T* obj, R (U::*method)(X1, X2), const P1& p1, const P2& p2) {
2012 MutantRunner<R, Tuple<>>* t = 2122 MutantRunner<R, base::Tuple<>>* t =
2013 new Mutant<R, T, R (U::*)(X1, X2), 2123 new Mutant<R, T, R (U::*)(X1, X2),
2014 Tuple<P1, P2>, Tuple<>> 2124 base::Tuple<P1, P2>, base::Tuple<>>
2015 (obj, method, MakeTuple(p1, p2)); 2125 (obj, method, base::MakeTuple(p1, p2));
2016 return MutantFunctor<R, Tuple<>>(t); 2126 return MutantFunctor<R, base::Tuple<>>(t);
2017 } 2127 }
2018 2128
2019 template <typename R, typename P1, typename P2, typename X1, typename X2> 2129 template <typename R, typename P1, typename P2, typename X1, typename X2>
2020 inline MutantFunctor<R, Tuple<>> 2130 inline MutantFunctor<R, base::Tuple<>>
2021 CreateFunctor(R (*function)(X1, X2), const P1& p1, const P2& p2) { 2131 CreateFunctor(R (*function)(X1, X2), const P1& p1, const P2& p2) {
2022 MutantRunner<R, Tuple<>>* t = 2132 MutantRunner<R, base::Tuple<>>* t =
2023 new MutantFunction<R, R (*)(X1, X2), 2133 new MutantFunction<R, R (*)(X1, X2),
2024 Tuple<P1, P2>, Tuple<>> 2134 base::Tuple<P1, P2>, base::Tuple<>>
2025 (function, MakeTuple(p1, p2)); 2135 (function, base::MakeTuple(p1, p2));
2026 return MutantFunctor<R, Tuple<>>(t); 2136 return MutantFunctor<R, base::Tuple<>>(t);
2027 } 2137 }
2028 2138
2029 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 2139 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2030 template <typename R, typename T, typename U, typename P1, typename P2, 2140 template <typename R, typename T, typename U, typename P1, typename P2,
2031 typename X1, typename X2> 2141 typename X1, typename X2>
2032 inline MutantFunctor<R, Tuple<>> 2142 inline MutantFunctor<R, base::Tuple<>>
2033 CreateFunctor(T** obj, R (U::*method)(X1, X2), const P1& p1, const P2& p2) { 2143 CreateFunctor(T** obj, R (U::*method)(X1, X2), const P1& p1, const P2& p2) {
2034 MutantRunner<R, Tuple<>>* t = 2144 MutantRunner<R, base::Tuple<>>* t =
2035 new MutantLateObjectBind<R, T, R (U::*)(X1, X2), 2145 new MutantLateObjectBind<R, T, R (U::*)(X1, X2),
2036 Tuple<P1, P2>, Tuple<>> 2146 base::Tuple<P1, P2>, base::Tuple<>>
2037 (obj, method, MakeTuple(p1, p2)); 2147 (obj, method, base::MakeTuple(p1, p2));
2038 return MutantFunctor<R, Tuple<>>(t); 2148 return MutantFunctor<R, base::Tuple<>>(t);
2039 } 2149 }
2040 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 2150 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2041 2151
2042 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 2152 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
2043 template <typename R, typename T, typename U, typename P1, typename P2, 2153 template <typename R, typename T, typename U, typename P1, typename P2,
2044 typename X1, typename X2> 2154 typename X1, typename X2>
2045 inline MutantFunctor<R, Tuple<>> 2155 inline MutantFunctor<R, base::Tuple<>>
2046 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2), const P1& p1, 2156 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2), const P1& p1,
2047 const P2& p2) { 2157 const P2& p2) {
2048 MutantRunner<R, Tuple<>>* t = 2158 MutantRunner<R, base::Tuple<>>* t =
2049 new Mutant<R, T, R (__stdcall U::*)(X1, X2), 2159 new Mutant<R, T, R (__stdcall U::*)(X1, X2),
2050 Tuple<P1, P2>, Tuple<>> 2160 base::Tuple<P1, P2>, base::Tuple<>>
2051 (obj, method, MakeTuple(p1, p2)); 2161 (obj, method, base::MakeTuple(p1, p2));
2052 return MutantFunctor<R, Tuple<>>(t); 2162 return MutantFunctor<R, base::Tuple<>>(t);
2053 } 2163 }
2054 2164
2055 template <typename R, typename P1, typename P2, typename X1, typename X2> 2165 template <typename R, typename P1, typename P2, typename X1, typename X2>
2056 inline MutantFunctor<R, Tuple<>> 2166 inline MutantFunctor<R, base::Tuple<>>
2057 CreateFunctor(R (__stdcall *function)(X1, X2), const P1& p1, const P2& p2) { 2167 CreateFunctor(R (__stdcall *function)(X1, X2), const P1& p1, const P2& p2) {
2058 MutantRunner<R, Tuple<>>* t = 2168 MutantRunner<R, base::Tuple<>>* t =
2059 new MutantFunction<R, R (__stdcall *)(X1, X2), 2169 new MutantFunction<R, R (__stdcall *)(X1, X2),
2060 Tuple<P1, P2>, Tuple<>> 2170 base::Tuple<P1, P2>, base::Tuple<>>
2061 (function, MakeTuple(p1, p2)); 2171 (function, base::MakeTuple(p1, p2));
2062 return MutantFunctor<R, Tuple<>>(t); 2172 return MutantFunctor<R, base::Tuple<>>(t);
2063 } 2173 }
2064 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 2174 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2065 template <typename R, typename T, typename U, typename P1, typename P2, 2175 template <typename R, typename T, typename U, typename P1, typename P2,
2066 typename X1, typename X2> 2176 typename X1, typename X2>
2067 inline MutantFunctor<R, Tuple<>> 2177 inline MutantFunctor<R, base::Tuple<>>
2068 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2), const P1& p1, 2178 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2), const P1& p1,
2069 const P2& p2) { 2179 const P2& p2) {
2070 MutantRunner<R, Tuple<>>* t = 2180 MutantRunner<R, base::Tuple<>>* t =
2071 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2), 2181 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2),
2072 Tuple<P1, P2>, Tuple<>> 2182 base::Tuple<P1, P2>, base::Tuple<>>
2073 (obj, method, MakeTuple(p1, p2)); 2183 (obj, method, base::MakeTuple(p1, p2));
2074 return MutantFunctor<R, Tuple<>>(t); 2184 return MutantFunctor<R, base::Tuple<>>(t);
2075 } 2185 }
2076 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 2186 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2077 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 2187 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
2078 2188
2079 // 2 - 1 2189 // 2 - 1
2080 template <typename R, typename T, typename U, typename P1, typename P2, 2190 template <typename R, typename T, typename U, typename P1, typename P2,
2081 typename A1, typename X1, typename X2> 2191 typename A1, typename X1, typename X2>
2082 inline MutantFunctor<R, Tuple<A1>> 2192 inline MutantFunctor<R, base::Tuple<A1>>
2083 CreateFunctor(T* obj, R (U::*method)(X1, X2, A1), const P1& p1, const P2& p2) { 2193 CreateFunctor(T* obj, R (U::*method)(X1, X2, A1), const P1& p1, const P2& p2) {
2084 MutantRunner<R, Tuple<A1>>* t = 2194 MutantRunner<R, base::Tuple<A1>>* t =
2085 new Mutant<R, T, R (U::*)(X1, X2, A1), 2195 new Mutant<R, T, R (U::*)(X1, X2, A1),
2086 Tuple<P1, P2>, Tuple<A1>> 2196 base::Tuple<P1, P2>, base::Tuple<A1>>
2087 (obj, method, MakeTuple(p1, p2)); 2197 (obj, method, base::MakeTuple(p1, p2));
2088 return MutantFunctor<R, Tuple<A1>>(t); 2198 return MutantFunctor<R, base::Tuple<A1>>(t);
2089 } 2199 }
2090 2200
2091 template <typename R, typename P1, typename P2, typename A1, typename X1, 2201 template <typename R, typename P1, typename P2, typename A1, typename X1,
2092 typename X2> 2202 typename X2>
2093 inline MutantFunctor<R, Tuple<A1>> 2203 inline MutantFunctor<R, base::Tuple<A1>>
2094 CreateFunctor(R (*function)(X1, X2, A1), const P1& p1, const P2& p2) { 2204 CreateFunctor(R (*function)(X1, X2, A1), const P1& p1, const P2& p2) {
2095 MutantRunner<R, Tuple<A1>>* t = 2205 MutantRunner<R, base::Tuple<A1>>* t =
2096 new MutantFunction<R, R (*)(X1, X2, A1), 2206 new MutantFunction<R, R (*)(X1, X2, A1),
2097 Tuple<P1, P2>, Tuple<A1>> 2207 base::Tuple<P1, P2>, base::Tuple<A1>>
2098 (function, MakeTuple(p1, p2)); 2208 (function, base::MakeTuple(p1, p2));
2099 return MutantFunctor<R, Tuple<A1>>(t); 2209 return MutantFunctor<R, base::Tuple<A1>>(t);
2100 } 2210 }
2101 2211
2102 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 2212 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2103 template <typename R, typename T, typename U, typename P1, typename P2, 2213 template <typename R, typename T, typename U, typename P1, typename P2,
2104 typename A1, typename X1, typename X2> 2214 typename A1, typename X1, typename X2>
2105 inline MutantFunctor<R, Tuple<A1>> 2215 inline MutantFunctor<R, base::Tuple<A1>>
2106 CreateFunctor(T** obj, R (U::*method)(X1, X2, A1), const P1& p1, const P2& p2) { 2216 CreateFunctor(T** obj, R (U::*method)(X1, X2, A1), const P1& p1, const P2& p2) {
2107 MutantRunner<R, Tuple<A1>>* t = 2217 MutantRunner<R, base::Tuple<A1>>* t =
2108 new MutantLateObjectBind<R, T, R (U::*)(X1, X2, A1), 2218 new MutantLateObjectBind<R, T, R (U::*)(X1, X2, A1),
2109 Tuple<P1, P2>, Tuple<A1>> 2219 base::Tuple<P1, P2>, base::Tuple<A1>>
2110 (obj, method, MakeTuple(p1, p2)); 2220 (obj, method, base::MakeTuple(p1, p2));
2111 return MutantFunctor<R, Tuple<A1>>(t); 2221 return MutantFunctor<R, base::Tuple<A1>>(t);
2112 } 2222 }
2113 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 2223 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2114 2224
2115 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 2225 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
2116 template <typename R, typename T, typename U, typename P1, typename P2, 2226 template <typename R, typename T, typename U, typename P1, typename P2,
2117 typename A1, typename X1, typename X2> 2227 typename A1, typename X1, typename X2>
2118 inline MutantFunctor<R, Tuple<A1>> 2228 inline MutantFunctor<R, base::Tuple<A1>>
2119 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, A1), const P1& p1, 2229 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, A1), const P1& p1,
2120 const P2& p2) { 2230 const P2& p2) {
2121 MutantRunner<R, Tuple<A1>>* t = 2231 MutantRunner<R, base::Tuple<A1>>* t =
2122 new Mutant<R, T, R (__stdcall U::*)(X1, X2, A1), 2232 new Mutant<R, T, R (__stdcall U::*)(X1, X2, A1),
2123 Tuple<P1, P2>, Tuple<A1>> 2233 base::Tuple<P1, P2>, base::Tuple<A1>>
2124 (obj, method, MakeTuple(p1, p2)); 2234 (obj, method, base::MakeTuple(p1, p2));
2125 return MutantFunctor<R, Tuple<A1>>(t); 2235 return MutantFunctor<R, base::Tuple<A1>>(t);
2126 } 2236 }
2127 2237
2128 template <typename R, typename P1, typename P2, typename A1, typename X1, 2238 template <typename R, typename P1, typename P2, typename A1, typename X1,
2129 typename X2> 2239 typename X2>
2130 inline MutantFunctor<R, Tuple<A1>> 2240 inline MutantFunctor<R, base::Tuple<A1>>
2131 CreateFunctor(R (__stdcall *function)(X1, X2, A1), const P1& p1, 2241 CreateFunctor(R (__stdcall *function)(X1, X2, A1), const P1& p1, const P2& p2) {
2132 const P2& p2) { 2242 MutantRunner<R, base::Tuple<A1>>* t =
2133 MutantRunner<R, Tuple<A1>>* t =
2134 new MutantFunction<R, R (__stdcall *)(X1, X2, A1), 2243 new MutantFunction<R, R (__stdcall *)(X1, X2, A1),
2135 Tuple<P1, P2>, Tuple<A1>> 2244 base::Tuple<P1, P2>, base::Tuple<A1>>
2136 (function, MakeTuple(p1, p2)); 2245 (function, base::MakeTuple(p1, p2));
2137 return MutantFunctor<R, Tuple<A1>>(t); 2246 return MutantFunctor<R, base::Tuple<A1>>(t);
2138 } 2247 }
2139 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 2248 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2140 template <typename R, typename T, typename U, typename P1, typename P2, 2249 template <typename R, typename T, typename U, typename P1, typename P2,
2141 typename A1, typename X1, typename X2> 2250 typename A1, typename X1, typename X2>
2142 inline MutantFunctor<R, Tuple<A1>> 2251 inline MutantFunctor<R, base::Tuple<A1>>
2143 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, A1), const P1& p1, 2252 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, A1), const P1& p1,
2144 const P2& p2) { 2253 const P2& p2) {
2145 MutantRunner<R, Tuple<A1>>* t = 2254 MutantRunner<R, base::Tuple<A1>>* t =
2146 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, A1), 2255 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, A1),
2147 Tuple<P1, P2>, Tuple<A1>> 2256 base::Tuple<P1, P2>, base::Tuple<A1>>
2148 (obj, method, MakeTuple(p1, p2)); 2257 (obj, method, base::MakeTuple(p1, p2));
2149 return MutantFunctor<R, Tuple<A1>>(t); 2258 return MutantFunctor<R, base::Tuple<A1>>(t);
2150 } 2259 }
2151 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 2260 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2152 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 2261 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
2153 2262
2154 // 2 - 2 2263 // 2 - 2
2155 template <typename R, typename T, typename U, typename P1, typename P2, 2264 template <typename R, typename T, typename U, typename P1, typename P2,
2156 typename A1, typename A2, typename X1, typename X2> 2265 typename A1, typename A2, typename X1, typename X2>
2157 inline MutantFunctor<R, Tuple<A1, A2>> 2266 inline MutantFunctor<R, base::Tuple<A1, A2>>
2158 CreateFunctor(T* obj, R (U::*method)(X1, X2, A1, A2), const P1& p1, 2267 CreateFunctor(T* obj, R (U::*method)(X1, X2, A1, A2), const P1& p1,
2159 const P2& p2) { 2268 const P2& p2) {
2160 MutantRunner<R, Tuple<A1, A2>>* t = 2269 MutantRunner<R, base::Tuple<A1, A2>>* t =
2161 new Mutant<R, T, R (U::*)(X1, X2, A1, A2), 2270 new Mutant<R, T, R (U::*)(X1, X2, A1, A2),
2162 Tuple<P1, P2>, Tuple<A1, A2>> 2271 base::Tuple<P1, P2>, base::Tuple<A1, A2>>
2163 (obj, method, MakeTuple(p1, p2)); 2272 (obj, method, base::MakeTuple(p1, p2));
2164 return MutantFunctor<R, Tuple<A1, A2>>(t); 2273 return MutantFunctor<R, base::Tuple<A1, A2>>(t);
2165 } 2274 }
2166 2275
2167 template <typename R, typename P1, typename P2, typename A1, typename A2, 2276 template <typename R, typename P1, typename P2, typename A1, typename A2,
2168 typename X1, typename X2> 2277 typename X1, typename X2>
2169 inline MutantFunctor<R, Tuple<A1, A2>> 2278 inline MutantFunctor<R, base::Tuple<A1, A2>>
2170 CreateFunctor(R (*function)(X1, X2, A1, A2), const P1& p1, const P2& p2) { 2279 CreateFunctor(R (*function)(X1, X2, A1, A2), const P1& p1, const P2& p2) {
2171 MutantRunner<R, Tuple<A1, A2>>* t = 2280 MutantRunner<R, base::Tuple<A1, A2>>* t =
2172 new MutantFunction<R, R (*)(X1, X2, A1, A2), 2281 new MutantFunction<R, R (*)(X1, X2, A1, A2),
2173 Tuple<P1, P2>, Tuple<A1, A2>> 2282 base::Tuple<P1, P2>, base::Tuple<A1, A2>>
2174 (function, MakeTuple(p1, p2)); 2283 (function, base::MakeTuple(p1, p2));
2175 return MutantFunctor<R, Tuple<A1, A2>>(t); 2284 return MutantFunctor<R, base::Tuple<A1, A2>>(t);
2176 } 2285 }
2177 2286
2178 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 2287 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2179 template <typename R, typename T, typename U, typename P1, typename P2, 2288 template <typename R, typename T, typename U, typename P1, typename P2,
2180 typename A1, typename A2, typename X1, typename X2> 2289 typename A1, typename A2, typename X1, typename X2>
2181 inline MutantFunctor<R, Tuple<A1, A2>> 2290 inline MutantFunctor<R, base::Tuple<A1, A2>>
2182 CreateFunctor(T** obj, R (U::*method)(X1, X2, A1, A2), const P1& p1, 2291 CreateFunctor(T** obj, R (U::*method)(X1, X2, A1, A2), const P1& p1,
2183 const P2& p2) { 2292 const P2& p2) {
2184 MutantRunner<R, Tuple<A1, A2>>* t = 2293 MutantRunner<R, base::Tuple<A1, A2>>* t =
2185 new MutantLateObjectBind<R, T, R (U::*)(X1, X2, A1, A2), 2294 new MutantLateObjectBind<R, T, R (U::*)(X1, X2, A1, A2),
2186 Tuple<P1, P2>, Tuple<A1, A2>> 2295 base::Tuple<P1, P2>, base::Tuple<A1, A2>>
2187 (obj, method, MakeTuple(p1, p2)); 2296 (obj, method, base::MakeTuple(p1, p2));
2188 return MutantFunctor<R, Tuple<A1, A2>>(t); 2297 return MutantFunctor<R, base::Tuple<A1, A2>>(t);
2189 } 2298 }
2190 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 2299 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2191 2300
2192 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 2301 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
2193 template <typename R, typename T, typename U, typename P1, typename P2, 2302 template <typename R, typename T, typename U, typename P1, typename P2,
2194 typename A1, typename A2, typename X1, typename X2> 2303 typename A1, typename A2, typename X1, typename X2>
2195 inline MutantFunctor<R, Tuple<A1, A2>> 2304 inline MutantFunctor<R, base::Tuple<A1, A2>>
2196 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, A1, A2), const P1& p1, 2305 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, A1, A2), const P1& p1,
2197 const P2& p2) { 2306 const P2& p2) {
2198 MutantRunner<R, Tuple<A1, A2>>* t = 2307 MutantRunner<R, base::Tuple<A1, A2>>* t =
2199 new Mutant<R, T, R (__stdcall U::*)(X1, X2, A1, A2), 2308 new Mutant<R, T, R (__stdcall U::*)(X1, X2, A1, A2),
2200 Tuple<P1, P2>, Tuple<A1, A2>> 2309 base::Tuple<P1, P2>, base::Tuple<A1, A2>>
2201 (obj, method, MakeTuple(p1, p2)); 2310 (obj, method, base::MakeTuple(p1, p2));
2202 return MutantFunctor<R, Tuple<A1, A2>>(t); 2311 return MutantFunctor<R, base::Tuple<A1, A2>>(t);
2203 } 2312 }
2204 2313
2205 template <typename R, typename P1, typename P2, typename A1, typename A2, 2314 template <typename R, typename P1, typename P2, typename A1, typename A2,
2206 typename X1, typename X2> 2315 typename X1, typename X2>
2207 inline MutantFunctor<R, Tuple<A1, A2>> 2316 inline MutantFunctor<R, base::Tuple<A1, A2>>
2208 CreateFunctor(R (__stdcall *function)(X1, X2, A1, A2), const P1& p1, 2317 CreateFunctor(R (__stdcall *function)(X1, X2, A1, A2), const P1& p1,
2209 const P2& p2) { 2318 const P2& p2) {
2210 MutantRunner<R, Tuple<A1, A2>>* t = 2319 MutantRunner<R, base::Tuple<A1, A2>>* t =
2211 new MutantFunction<R, R (__stdcall *)(X1, X2, A1, A2), 2320 new MutantFunction<R, R (__stdcall *)(X1, X2, A1, A2),
2212 Tuple<P1, P2>, Tuple<A1, A2>> 2321 base::Tuple<P1, P2>, base::Tuple<A1, A2>>
2213 (function, MakeTuple(p1, p2)); 2322 (function, base::MakeTuple(p1, p2));
2214 return MutantFunctor<R, Tuple<A1, A2>>(t); 2323 return MutantFunctor<R, base::Tuple<A1, A2>>(t);
2215 } 2324 }
2216 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 2325 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2217 template <typename R, typename T, typename U, typename P1, typename P2, 2326 template <typename R, typename T, typename U, typename P1, typename P2,
2218 typename A1, typename A2, typename X1, typename X2> 2327 typename A1, typename A2, typename X1, typename X2>
2219 inline MutantFunctor<R, Tuple<A1, A2>> 2328 inline MutantFunctor<R, base::Tuple<A1, A2>>
2220 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, A1, A2), const P1& p1, 2329 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, A1, A2), const P1& p1,
2221 const P2& p2) { 2330 const P2& p2) {
2222 MutantRunner<R, Tuple<A1, A2>>* t = 2331 MutantRunner<R, base::Tuple<A1, A2>>* t =
2223 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, A1, A2), 2332 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, A1, A2),
2224 Tuple<P1, P2>, Tuple<A1, A2>> 2333 base::Tuple<P1, P2>, base::Tuple<A1, A2>>
2225 (obj, method, MakeTuple(p1, p2)); 2334 (obj, method, base::MakeTuple(p1, p2));
2226 return MutantFunctor<R, Tuple<A1, A2>>(t); 2335 return MutantFunctor<R, base::Tuple<A1, A2>>(t);
2227 } 2336 }
2228 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 2337 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2229 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 2338 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
2230 2339
2231 // 2 - 3 2340 // 2 - 3
2232 template <typename R, typename T, typename U, typename P1, typename P2, 2341 template <typename R, typename T, typename U, typename P1, typename P2,
2233 typename A1, typename A2, typename A3, typename X1, typename X2> 2342 typename A1, typename A2, typename A3, typename X1, typename X2>
2234 inline MutantFunctor<R, Tuple<A1, A2, A3>> 2343 inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
2235 CreateFunctor(T* obj, R (U::*method)(X1, X2, A1, A2, A3), const P1& p1, 2344 CreateFunctor(T* obj, R (U::*method)(X1, X2, A1, A2, A3), const P1& p1,
2236 const P2& p2) { 2345 const P2& p2) {
2237 MutantRunner<R, Tuple<A1, A2, A3>>* t = 2346 MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
2238 new Mutant<R, T, R (U::*)(X1, X2, A1, A2, A3), 2347 new Mutant<R, T, R (U::*)(X1, X2, A1, A2, A3),
2239 Tuple<P1, P2>, Tuple<A1, A2, A3>> 2348 base::Tuple<P1, P2>, base::Tuple<A1, A2, A3>>
2240 (obj, method, MakeTuple(p1, p2)); 2349 (obj, method, base::MakeTuple(p1, p2));
2241 return MutantFunctor<R, Tuple<A1, A2, A3>>(t); 2350 return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
2242 } 2351 }
2243 2352
2244 template <typename R, typename P1, typename P2, typename A1, typename A2, 2353 template <typename R, typename P1, typename P2, typename A1, typename A2,
2245 typename A3, typename X1, typename X2> 2354 typename A3, typename X1, typename X2>
2246 inline MutantFunctor<R, Tuple<A1, A2, A3>> 2355 inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
2247 CreateFunctor(R (*function)(X1, X2, A1, A2, A3), const P1& p1, const P2& p2) { 2356 CreateFunctor(R (*function)(X1, X2, A1, A2, A3), const P1& p1, const P2& p2) {
2248 MutantRunner<R, Tuple<A1, A2, A3>>* t = 2357 MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
2249 new MutantFunction<R, R (*)(X1, X2, A1, A2, A3), 2358 new MutantFunction<R, R (*)(X1, X2, A1, A2, A3),
2250 Tuple<P1, P2>, Tuple<A1, A2, A3>> 2359 base::Tuple<P1, P2>, base::Tuple<A1, A2, A3>>
2251 (function, MakeTuple(p1, p2)); 2360 (function, base::MakeTuple(p1, p2));
2252 return MutantFunctor<R, Tuple<A1, A2, A3>>(t); 2361 return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
2253 } 2362 }
2254 2363
2255 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 2364 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2256 template <typename R, typename T, typename U, typename P1, typename P2, 2365 template <typename R, typename T, typename U, typename P1, typename P2,
2257 typename A1, typename A2, typename A3, typename X1, typename X2> 2366 typename A1, typename A2, typename A3, typename X1, typename X2>
2258 inline MutantFunctor<R, Tuple<A1, A2, A3>> 2367 inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
2259 CreateFunctor(T** obj, R (U::*method)(X1, X2, A1, A2, A3), const P1& p1, 2368 CreateFunctor(T** obj, R (U::*method)(X1, X2, A1, A2, A3), const P1& p1,
2260 const P2& p2) { 2369 const P2& p2) {
2261 MutantRunner<R, Tuple<A1, A2, A3>>* t = 2370 MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
2262 new MutantLateObjectBind<R, T, R (U::*)(X1, X2, A1, A2, A3), 2371 new MutantLateObjectBind<R, T, R (U::*)(X1, X2, A1, A2, A3),
2263 Tuple<P1, P2>, Tuple<A1, A2, A3>> 2372 base::Tuple<P1, P2>, base::Tuple<A1, A2, A3>>
2264 (obj, method, MakeTuple(p1, p2)); 2373 (obj, method, base::MakeTuple(p1, p2));
2265 return MutantFunctor<R, Tuple<A1, A2, A3>>(t); 2374 return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
2266 } 2375 }
2267 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 2376 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2268 2377
2269 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 2378 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
2270 template <typename R, typename T, typename U, typename P1, typename P2, 2379 template <typename R, typename T, typename U, typename P1, typename P2,
2271 typename A1, typename A2, typename A3, typename X1, typename X2> 2380 typename A1, typename A2, typename A3, typename X1, typename X2>
2272 inline MutantFunctor<R, Tuple<A1, A2, A3>> 2381 inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
2273 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, A1, A2, A3), 2382 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, A1, A2, A3),
2274 const P1& p1, const P2& p2) { 2383 const P1& p1, const P2& p2) {
2275 MutantRunner<R, Tuple<A1, A2, A3>>* t = 2384 MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
2276 new Mutant<R, T, R (__stdcall U::*)(X1, X2, A1, A2, A3), 2385 new Mutant<R, T, R (__stdcall U::*)(X1, X2, A1, A2, A3),
2277 Tuple<P1, P2>, Tuple<A1, A2, A3>> 2386 base::Tuple<P1, P2>, base::Tuple<A1, A2, A3>>
2278 (obj, method, MakeTuple(p1, p2)); 2387 (obj, method, base::MakeTuple(p1, p2));
2279 return MutantFunctor<R, Tuple<A1, A2, A3>>(t); 2388 return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
2280 } 2389 }
2281 2390
2282 template <typename R, typename P1, typename P2, typename A1, typename A2, 2391 template <typename R, typename P1, typename P2, typename A1, typename A2,
2283 typename A3, typename X1, typename X2> 2392 typename A3, typename X1, typename X2>
2284 inline MutantFunctor<R, Tuple<A1, A2, A3>> 2393 inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
2285 CreateFunctor(R (__stdcall *function)(X1, X2, A1, A2, A3), const P1& p1, 2394 CreateFunctor(R (__stdcall *function)(X1, X2, A1, A2, A3), const P1& p1,
2286 const P2& p2) { 2395 const P2& p2) {
2287 MutantRunner<R, Tuple<A1, A2, A3>>* t = 2396 MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
2288 new MutantFunction<R, R (__stdcall *)(X1, X2, A1, A2, A3), 2397 new MutantFunction<R, R (__stdcall *)(X1, X2, A1, A2, A3),
2289 Tuple<P1, P2>, Tuple<A1, A2, A3>> 2398 base::Tuple<P1, P2>, base::Tuple<A1, A2, A3>>
2290 (function, MakeTuple(p1, p2)); 2399 (function, base::MakeTuple(p1, p2));
2291 return MutantFunctor<R, Tuple<A1, A2, A3>>(t); 2400 return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
2292 } 2401 }
2293 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 2402 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2294 template <typename R, typename T, typename U, typename P1, typename P2, 2403 template <typename R, typename T, typename U, typename P1, typename P2,
2295 typename A1, typename A2, typename A3, typename X1, typename X2> 2404 typename A1, typename A2, typename A3, typename X1, typename X2>
2296 inline MutantFunctor<R, Tuple<A1, A2, A3>> 2405 inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
2297 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, A1, A2, A3), 2406 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, A1, A2, A3),
2298 const P1& p1, const P2& p2) { 2407 const P1& p1, const P2& p2) {
2299 MutantRunner<R, Tuple<A1, A2, A3>>* t = 2408 MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
2300 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, A1, A2, A3), 2409 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, A1, A2, A3),
2301 Tuple<P1, P2>, Tuple<A1, A2, A3>> 2410 base::Tuple<P1, P2>, base::Tuple<A1, A2, A3>>
2302 (obj, method, MakeTuple(p1, p2)); 2411 (obj, method, base::MakeTuple(p1, p2));
2303 return MutantFunctor<R, Tuple<A1, A2, A3>>(t); 2412 return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
2304 } 2413 }
2305 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 2414 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2306 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 2415 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
2307 2416
2308 // 2 - 4 2417 // 2 - 4
2309 template <typename R, typename T, typename U, typename P1, typename P2, 2418 template <typename R, typename T, typename U, typename P1, typename P2,
2310 typename A1, typename A2, typename A3, typename A4, typename X1, 2419 typename A1, typename A2, typename A3, typename A4, typename X1,
2311 typename X2> 2420 typename X2>
2312 inline MutantFunctor<R, Tuple<A1, A2, A3, A4>> 2421 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
2313 CreateFunctor(T* obj, R (U::*method)(X1, X2, A1, A2, A3, A4), const P1& p1, 2422 CreateFunctor(T* obj, R (U::*method)(X1, X2, A1, A2, A3, A4), const P1& p1,
2314 const P2& p2) { 2423 const P2& p2) {
2315 MutantRunner<R, Tuple<A1, A2, A3, A4>>* t = 2424 MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
2316 new Mutant<R, T, R (U::*)(X1, X2, A1, A2, A3, A4), 2425 new Mutant<R, T, R (U::*)(X1, X2, A1, A2, A3, A4),
2317 Tuple<P1, P2>, Tuple<A1, A2, A3, A4>> 2426 base::Tuple<P1, P2>, base::Tuple<A1, A2, A3, A4>>
2318 (obj, method, MakeTuple(p1, p2)); 2427 (obj, method, base::MakeTuple(p1, p2));
2319 return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t); 2428 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
2320 } 2429 }
2321 2430
2322 template <typename R, typename P1, typename P2, typename A1, typename A2, 2431 template <typename R, typename P1, typename P2, typename A1, typename A2,
2323 typename A3, typename A4, typename X1, typename X2> 2432 typename A3, typename A4, typename X1, typename X2>
2324 inline MutantFunctor<R, Tuple<A1, A2, A3, A4>> 2433 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
2325 CreateFunctor(R (*function)(X1, X2, A1, A2, A3, A4), const P1& p1, 2434 CreateFunctor(R (*function)(X1, X2, A1, A2, A3, A4), const P1& p1,
2326 const P2& p2) { 2435 const P2& p2) {
2327 MutantRunner<R, Tuple<A1, A2, A3, A4>>* t = 2436 MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
2328 new MutantFunction<R, R (*)(X1, X2, A1, A2, A3, A4), 2437 new MutantFunction<R, R (*)(X1, X2, A1, A2, A3, A4),
2329 Tuple<P1, P2>, Tuple<A1, A2, A3, A4>> 2438 base::Tuple<P1, P2>, base::Tuple<A1, A2, A3, A4>>
2330 (function, MakeTuple(p1, p2)); 2439 (function, base::MakeTuple(p1, p2));
2331 return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t); 2440 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
2332 } 2441 }
2333 2442
2334 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 2443 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2335 template <typename R, typename T, typename U, typename P1, typename P2, 2444 template <typename R, typename T, typename U, typename P1, typename P2,
2336 typename A1, typename A2, typename A3, typename A4, typename X1, 2445 typename A1, typename A2, typename A3, typename A4, typename X1,
2337 typename X2> 2446 typename X2>
2338 inline MutantFunctor<R, Tuple<A1, A2, A3, A4>> 2447 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
2339 CreateFunctor(T** obj, R (U::*method)(X1, X2, A1, A2, A3, A4), const P1& p1, 2448 CreateFunctor(T** obj, R (U::*method)(X1, X2, A1, A2, A3, A4), const P1& p1,
2340 const P2& p2) { 2449 const P2& p2) {
2341 MutantRunner<R, Tuple<A1, A2, A3, A4>>* t = 2450 MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
2342 new MutantLateObjectBind<R, T, R (U::*)(X1, X2, A1, A2, A3, A4), 2451 new MutantLateObjectBind<R, T, R (U::*)(X1, X2, A1, A2, A3, A4),
2343 Tuple<P1, P2>, Tuple<A1, A2, A3, A4>> 2452 base::Tuple<P1, P2>, base::Tuple<A1, A2, A3, A4>>
2344 (obj, method, MakeTuple(p1, p2)); 2453 (obj, method, base::MakeTuple(p1, p2));
2345 return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t); 2454 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
2346 } 2455 }
2347 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 2456 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2348 2457
2349 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 2458 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
2350 template <typename R, typename T, typename U, typename P1, typename P2, 2459 template <typename R, typename T, typename U, typename P1, typename P2,
2351 typename A1, typename A2, typename A3, typename A4, typename X1, 2460 typename A1, typename A2, typename A3, typename A4, typename X1,
2352 typename X2> 2461 typename X2>
2353 inline MutantFunctor<R, Tuple<A1, A2, A3, A4>> 2462 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
2354 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, A1, A2, A3, A4), 2463 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, A1, A2, A3, A4),
2355 const P1& p1, const P2& p2) { 2464 const P1& p1, const P2& p2) {
2356 MutantRunner<R, Tuple<A1, A2, A3, A4>>* t = 2465 MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
2357 new Mutant<R, T, R (__stdcall U::*)(X1, X2, A1, A2, A3, A4), 2466 new Mutant<R, T, R (__stdcall U::*)(X1, X2, A1, A2, A3, A4),
2358 Tuple<P1, P2>, Tuple<A1, A2, A3, A4>> 2467 base::Tuple<P1, P2>, base::Tuple<A1, A2, A3, A4>>
2359 (obj, method, MakeTuple(p1, p2)); 2468 (obj, method, base::MakeTuple(p1, p2));
2360 return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t); 2469 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
2361 } 2470 }
2362 2471
2363 template <typename R, typename P1, typename P2, typename A1, typename A2, 2472 template <typename R, typename P1, typename P2, typename A1, typename A2,
2364 typename A3, typename A4, typename X1, typename X2> 2473 typename A3, typename A4, typename X1, typename X2>
2365 inline MutantFunctor<R, Tuple<A1, A2, A3, A4>> 2474 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
2366 CreateFunctor(R (__stdcall *function)(X1, X2, A1, A2, A3, A4), const P1& p1, 2475 CreateFunctor(R (__stdcall *function)(X1, X2, A1, A2, A3, A4), const P1& p1,
2367 const P2& p2) { 2476 const P2& p2) {
2368 MutantRunner<R, Tuple<A1, A2, A3, A4>>* t = 2477 MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
2369 new MutantFunction<R, R (__stdcall *)(X1, X2, A1, A2, A3, A4), 2478 new MutantFunction<R, R (__stdcall *)(X1, X2, A1, A2, A3, A4),
2370 Tuple<P1, P2>, Tuple<A1, A2, A3, A4>> 2479 base::Tuple<P1, P2>, base::Tuple<A1, A2, A3, A4>>
2371 (function, MakeTuple(p1, p2)); 2480 (function, base::MakeTuple(p1, p2));
2372 return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t); 2481 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
2373 } 2482 }
2374 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 2483 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2375 template <typename R, typename T, typename U, typename P1, typename P2, 2484 template <typename R, typename T, typename U, typename P1, typename P2,
2376 typename A1, typename A2, typename A3, typename A4, typename X1, 2485 typename A1, typename A2, typename A3, typename A4, typename X1,
2377 typename X2> 2486 typename X2>
2378 inline MutantFunctor<R, Tuple<A1, A2, A3, A4>> 2487 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
2379 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, A1, A2, A3, A4), 2488 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, A1, A2, A3, A4),
2380 const P1& p1, const P2& p2) { 2489 const P1& p1, const P2& p2) {
2381 MutantRunner<R, Tuple<A1, A2, A3, A4>>* t = 2490 MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
2382 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, A1, A2, A3, A4), 2491 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, A1, A2, A3, A4),
2383 Tuple<P1, P2>, Tuple<A1, A2, A3, A4>> 2492 base::Tuple<P1, P2>, base::Tuple<A1, A2, A3, A4>>
2384 (obj, method, MakeTuple(p1, p2)); 2493 (obj, method, base::MakeTuple(p1, p2));
2385 return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t); 2494 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
2386 } 2495 }
2387 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 2496 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2388 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 2497 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
2389 2498
2390 // 2 - 5 2499 // 2 - 5
2391 template <typename R, typename T, typename U, typename P1, typename P2, 2500 template <typename R, typename T, typename U, typename P1, typename P2,
2392 typename A1, typename A2, typename A3, typename A4, typename A5, 2501 typename A1, typename A2, typename A3, typename A4, typename A5,
2393 typename X1, typename X2> 2502 typename X1, typename X2>
2394 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>> 2503 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
2395 CreateFunctor(T* obj, R (U::*method)(X1, X2, A1, A2, A3, A4, A5), const P1& p1, 2504 CreateFunctor(T* obj, R (U::*method)(X1, X2, A1, A2, A3, A4, A5), const P1& p1,
2396 const P2& p2) { 2505 const P2& p2) {
2397 MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t = 2506 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
2398 new Mutant<R, T, R (U::*)(X1, X2, A1, A2, A3, A4, A5), 2507 new Mutant<R, T, R (U::*)(X1, X2, A1, A2, A3, A4, A5),
2399 Tuple<P1, P2>, Tuple<A1, A2, A3, A4, A5>> 2508 base::Tuple<P1, P2>, base::Tuple<A1, A2, A3, A4, A5>>
2400 (obj, method, MakeTuple(p1, p2)); 2509 (obj, method, base::MakeTuple(p1, p2));
2401 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t); 2510 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
2402 } 2511 }
2403 2512
2404 template <typename R, typename P1, typename P2, typename A1, typename A2, 2513 template <typename R, typename P1, typename P2, typename A1, typename A2,
2405 typename A3, typename A4, typename A5, typename X1, typename X2> 2514 typename A3, typename A4, typename A5, typename X1, typename X2>
2406 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>> 2515 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
2407 CreateFunctor(R (*function)(X1, X2, A1, A2, A3, A4, A5), const P1& p1, 2516 CreateFunctor(R (*function)(X1, X2, A1, A2, A3, A4, A5), const P1& p1,
2408 const P2& p2) { 2517 const P2& p2) {
2409 MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t = 2518 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
2410 new MutantFunction<R, R (*)(X1, X2, A1, A2, A3, A4, A5), 2519 new MutantFunction<R, R (*)(X1, X2, A1, A2, A3, A4, A5),
2411 Tuple<P1, P2>, Tuple<A1, A2, A3, A4, A5>> 2520 base::Tuple<P1, P2>, base::Tuple<A1, A2, A3, A4, A5>>
2412 (function, MakeTuple(p1, p2)); 2521 (function, base::MakeTuple(p1, p2));
2413 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t); 2522 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
2414 } 2523 }
2415 2524
2416 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 2525 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2417 template <typename R, typename T, typename U, typename P1, typename P2, 2526 template <typename R, typename T, typename U, typename P1, typename P2,
2418 typename A1, typename A2, typename A3, typename A4, typename A5, 2527 typename A1, typename A2, typename A3, typename A4, typename A5,
2419 typename X1, typename X2> 2528 typename X1, typename X2>
2420 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>> 2529 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
2421 CreateFunctor(T** obj, R (U::*method)(X1, X2, A1, A2, A3, A4, A5), const P1& p1, 2530 CreateFunctor(T** obj, R (U::*method)(X1, X2, A1, A2, A3, A4, A5), const P1& p1,
2422 const P2& p2) { 2531 const P2& p2) {
2423 MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t = 2532 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
2424 new MutantLateObjectBind<R, T, R (U::*)(X1, X2, A1, A2, A3, A4, A5), 2533 new MutantLateObjectBind<R, T, R (U::*)(X1, X2, A1, A2, A3, A4, A5),
2425 Tuple<P1, P2>, Tuple<A1, A2, A3, A4, A5>> 2534 base::Tuple<P1, P2>, base::Tuple<A1, A2, A3, A4, A5>>
2426 (obj, method, MakeTuple(p1, p2)); 2535 (obj, method, base::MakeTuple(p1, p2));
2427 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t); 2536 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
2428 } 2537 }
2429 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 2538 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2430 2539
2431 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 2540 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
2432 template <typename R, typename T, typename U, typename P1, typename P2, 2541 template <typename R, typename T, typename U, typename P1, typename P2,
2433 typename A1, typename A2, typename A3, typename A4, typename A5, 2542 typename A1, typename A2, typename A3, typename A4, typename A5,
2434 typename X1, typename X2> 2543 typename X1, typename X2>
2435 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>> 2544 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
2436 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, A1, A2, A3, A4, A5), 2545 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, A1, A2, A3, A4, A5),
2437 const P1& p1, const P2& p2) { 2546 const P1& p1, const P2& p2) {
2438 MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t = 2547 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
2439 new Mutant<R, T, R (__stdcall U::*)(X1, X2, A1, A2, A3, A4, A5), 2548 new Mutant<R, T, R (__stdcall U::*)(X1, X2, A1, A2, A3, A4, A5),
2440 Tuple<P1, P2>, Tuple<A1, A2, A3, A4, A5>> 2549 base::Tuple<P1, P2>, base::Tuple<A1, A2, A3, A4, A5>>
2441 (obj, method, MakeTuple(p1, p2)); 2550 (obj, method, base::MakeTuple(p1, p2));
2442 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t); 2551 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
2443 } 2552 }
2444 2553
2445 template <typename R, typename P1, typename P2, typename A1, typename A2, 2554 template <typename R, typename P1, typename P2, typename A1, typename A2,
2446 typename A3, typename A4, typename A5, typename X1, typename X2> 2555 typename A3, typename A4, typename A5, typename X1, typename X2>
2447 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>> 2556 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
2448 CreateFunctor(R (__stdcall *function)(X1, X2, A1, A2, A3, A4, A5), const P1& p1, 2557 CreateFunctor(R (__stdcall *function)(X1, X2, A1, A2, A3, A4, A5), const P1& p1,
2449 const P2& p2) { 2558 const P2& p2) {
2450 MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t = 2559 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
2451 new MutantFunction<R, R (__stdcall *)(X1, X2, A1, A2, A3, A4, A5), 2560 new MutantFunction<R, R (__stdcall *)(X1, X2, A1, A2, A3, A4, A5),
2452 Tuple<P1, P2>, Tuple<A1, A2, A3, A4, A5>> 2561 base::Tuple<P1, P2>, base::Tuple<A1, A2, A3, A4, A5>>
2453 (function, MakeTuple(p1, p2)); 2562 (function, base::MakeTuple(p1, p2));
2454 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t); 2563 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
2455 } 2564 }
2456 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 2565 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2457 template <typename R, typename T, typename U, typename P1, typename P2, 2566 template <typename R, typename T, typename U, typename P1, typename P2,
2458 typename A1, typename A2, typename A3, typename A4, typename A5, 2567 typename A1, typename A2, typename A3, typename A4, typename A5,
2459 typename X1, typename X2> 2568 typename X1, typename X2>
2460 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>> 2569 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
2461 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, A1, A2, A3, A4, A5), 2570 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, A1, A2, A3, A4, A5),
2462 const P1& p1, const P2& p2) { 2571 const P1& p1, const P2& p2) {
2463 MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t = 2572 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
2464 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, A1, A2, A3, A4, A5), 2573 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, A1, A2, A3, A4, A5),
2465 Tuple<P1, P2>, Tuple<A1, A2, A3, A4, A5>> 2574 base::Tuple<P1, P2>, base::Tuple<A1, A2, A3, A4, A5>>
2466 (obj, method, MakeTuple(p1, p2)); 2575 (obj, method, base::MakeTuple(p1, p2));
2467 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t); 2576 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
2468 } 2577 }
2469 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 2578 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2470 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 2579 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
2471 2580
2472 // 2 - 6 2581 // 2 - 6
2473 template <typename R, typename T, typename U, typename P1, typename P2, 2582 template <typename R, typename T, typename U, typename P1, typename P2,
2474 typename A1, typename A2, typename A3, typename A4, typename A5, 2583 typename A1, typename A2, typename A3, typename A4, typename A5,
2475 typename A6, typename X1, typename X2> 2584 typename A6, typename X1, typename X2>
2476 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>> 2585 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
2477 CreateFunctor(T* obj, R (U::*method)(X1, X2, A1, A2, A3, A4, A5, A6), 2586 CreateFunctor(T* obj, R (U::*method)(X1, X2, A1, A2, A3, A4, A5, A6),
2478 const P1& p1, const P2& p2) { 2587 const P1& p1, const P2& p2) {
2479 MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t = 2588 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
2480 new Mutant<R, T, R (U::*)(X1, X2, A1, A2, A3, A4, A5, A6), 2589 new Mutant<R, T, R (U::*)(X1, X2, A1, A2, A3, A4, A5, A6),
2481 Tuple<P1, P2>, Tuple<A1, A2, A3, A4, A5, A6>> 2590 base::Tuple<P1, P2>, base::Tuple<A1, A2, A3, A4, A5, A6>>
2482 (obj, method, MakeTuple(p1, p2)); 2591 (obj, method, base::MakeTuple(p1, p2));
2483 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t); 2592 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
2484 } 2593 }
2485 2594
2486 template <typename R, typename P1, typename P2, typename A1, typename A2, 2595 template <typename R, typename P1, typename P2, typename A1, typename A2,
2487 typename A3, typename A4, typename A5, typename A6, typename X1, 2596 typename A3, typename A4, typename A5, typename A6, typename X1,
2488 typename X2> 2597 typename X2>
2489 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>> 2598 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
2490 CreateFunctor(R (*function)(X1, X2, A1, A2, A3, A4, A5, A6), const P1& p1, 2599 CreateFunctor(R (*function)(X1, X2, A1, A2, A3, A4, A5, A6), const P1& p1,
2491 const P2& p2) { 2600 const P2& p2) {
2492 MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t = 2601 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
2493 new MutantFunction<R, R (*)(X1, X2, A1, A2, A3, A4, A5, A6), 2602 new MutantFunction<R, R (*)(X1, X2, A1, A2, A3, A4, A5, A6),
2494 Tuple<P1, P2>, Tuple<A1, A2, A3, A4, A5, A6>> 2603 base::Tuple<P1, P2>, base::Tuple<A1, A2, A3, A4, A5,
2495 (function, MakeTuple(p1, p2)); 2604 A6>>
2496 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t); 2605 (function, base::MakeTuple(p1, p2));
2606 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
2497 } 2607 }
2498 2608
2499 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 2609 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2500 template <typename R, typename T, typename U, typename P1, typename P2, 2610 template <typename R, typename T, typename U, typename P1, typename P2,
2501 typename A1, typename A2, typename A3, typename A4, typename A5, 2611 typename A1, typename A2, typename A3, typename A4, typename A5,
2502 typename A6, typename X1, typename X2> 2612 typename A6, typename X1, typename X2>
2503 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>> 2613 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
2504 CreateFunctor(T** obj, R (U::*method)(X1, X2, A1, A2, A3, A4, A5, A6), 2614 CreateFunctor(T** obj, R (U::*method)(X1, X2, A1, A2, A3, A4, A5, A6),
2505 const P1& p1, const P2& p2) { 2615 const P1& p1, const P2& p2) {
2506 MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t = 2616 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
2507 new MutantLateObjectBind<R, T, R (U::*)(X1, X2, A1, A2, A3, A4, A5, A6), 2617 new MutantLateObjectBind<R, T, R (U::*)(X1, X2, A1, A2, A3, A4, A5, A6),
2508 Tuple<P1, P2>, Tuple<A1, A2, A3, A4, A5, A6>> 2618 base::Tuple<P1, P2>, base::Tuple<A1, A2, A3, A4, A5, A6>>
2509 (obj, method, MakeTuple(p1, p2)); 2619 (obj, method, base::MakeTuple(p1, p2));
2510 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t); 2620 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
2511 } 2621 }
2512 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 2622 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2513 2623
2514 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 2624 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
2515 template <typename R, typename T, typename U, typename P1, typename P2, 2625 template <typename R, typename T, typename U, typename P1, typename P2,
2516 typename A1, typename A2, typename A3, typename A4, typename A5, 2626 typename A1, typename A2, typename A3, typename A4, typename A5,
2517 typename A6, typename X1, typename X2> 2627 typename A6, typename X1, typename X2>
2518 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>> 2628 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
2519 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, A1, A2, A3, A4, A5, A6), 2629 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, A1, A2, A3, A4, A5, A6),
2520 const P1& p1, const P2& p2) { 2630 const P1& p1, const P2& p2) {
2521 MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t = 2631 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
2522 new Mutant<R, T, R (__stdcall U::*)(X1, X2, A1, A2, A3, A4, A5, A6), 2632 new Mutant<R, T, R (__stdcall U::*)(X1, X2, A1, A2, A3, A4, A5, A6),
2523 Tuple<P1, P2>, Tuple<A1, A2, A3, A4, A5, A6>> 2633 base::Tuple<P1, P2>, base::Tuple<A1, A2, A3, A4, A5, A6>>
2524 (obj, method, MakeTuple(p1, p2)); 2634 (obj, method, base::MakeTuple(p1, p2));
2525 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t); 2635 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
2526 } 2636 }
2527 2637
2528 template <typename R, typename P1, typename P2, typename A1, typename A2, 2638 template <typename R, typename P1, typename P2, typename A1, typename A2,
2529 typename A3, typename A4, typename A5, typename A6, typename X1, 2639 typename A3, typename A4, typename A5, typename A6, typename X1,
2530 typename X2> 2640 typename X2>
2531 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>> 2641 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
2532 CreateFunctor(R (__stdcall *function)(X1, X2, A1, A2, A3, A4, A5, A6), 2642 CreateFunctor(R (__stdcall *function)(X1, X2, A1, A2, A3, A4, A5, A6),
2533 const P1& p1, const P2& p2) { 2643 const P1& p1, const P2& p2) {
2534 MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t = 2644 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
2535 new MutantFunction<R, R (__stdcall *)(X1, X2, A1, A2, A3, A4, A5, A6), 2645 new MutantFunction<R, R (__stdcall *)(X1, X2, A1, A2, A3, A4, A5, A6),
2536 Tuple<P1, P2>, Tuple<A1, A2, A3, A4, A5, A6>> 2646 base::Tuple<P1, P2>, base::Tuple<A1, A2, A3, A4, A5,
2537 (function, MakeTuple(p1, p2)); 2647 A6>>
2538 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t); 2648 (function, base::MakeTuple(p1, p2));
2649 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
2539 } 2650 }
2540 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 2651 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2541 template <typename R, typename T, typename U, typename P1, typename P2, 2652 template <typename R, typename T, typename U, typename P1, typename P2,
2542 typename A1, typename A2, typename A3, typename A4, typename A5, 2653 typename A1, typename A2, typename A3, typename A4, typename A5,
2543 typename A6, typename X1, typename X2> 2654 typename A6, typename X1, typename X2>
2544 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>> 2655 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
2545 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, A1, A2, A3, A4, A5, A6), 2656 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, A1, A2, A3, A4, A5, A6),
2546 const P1& p1, const P2& p2) { 2657 const P1& p1, const P2& p2) {
2547 MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t = 2658 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
2548 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, A1, A2, A3, A4, A5, A6), 2659 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, A1, A2, A3, A4, A5, A6),
2549 Tuple<P1, P2>, Tuple<A1, A2, A3, A4, A5, A6>> 2660 base::Tuple<P1, P2>, base::Tuple<A1, A2, A3, A4, A5, A6>>
2550 (obj, method, MakeTuple(p1, p2)); 2661 (obj, method, base::MakeTuple(p1, p2));
2551 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t); 2662 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
2552 } 2663 }
2553 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 2664 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2554 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 2665 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
2555 2666
2556 // 3 - 0 2667 // 3 - 0
2557 template <typename R, typename T, typename U, typename P1, typename P2, 2668 template <typename R, typename T, typename U, typename P1, typename P2,
2558 typename P3, typename X1, typename X2, typename X3> 2669 typename P3, typename X1, typename X2, typename X3>
2559 inline MutantFunctor<R, Tuple<>> 2670 inline MutantFunctor<R, base::Tuple<>>
2560 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3), const P1& p1, const P2& p2, 2671 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3), const P1& p1, const P2& p2,
2561 const P3& p3) { 2672 const P3& p3) {
2562 MutantRunner<R, Tuple<>>* t = 2673 MutantRunner<R, base::Tuple<>>* t =
2563 new Mutant<R, T, R (U::*)(X1, X2, X3), 2674 new Mutant<R, T, R (U::*)(X1, X2, X3),
2564 Tuple<P1, P2, P3>, Tuple<>> 2675 base::Tuple<P1, P2, P3>, base::Tuple<>>
2565 (obj, method, MakeTuple(p1, p2, p3)); 2676 (obj, method, base::MakeTuple(p1, p2, p3));
2566 return MutantFunctor<R, Tuple<>>(t); 2677 return MutantFunctor<R, base::Tuple<>>(t);
2567 } 2678 }
2568 2679
2569 template <typename R, typename P1, typename P2, typename P3, typename X1, 2680 template <typename R, typename P1, typename P2, typename P3, typename X1,
2570 typename X2, typename X3> 2681 typename X2, typename X3>
2571 inline MutantFunctor<R, Tuple<>> 2682 inline MutantFunctor<R, base::Tuple<>>
2572 CreateFunctor(R (*function)(X1, X2, X3), const P1& p1, const P2& p2, 2683 CreateFunctor(R (*function)(X1, X2, X3), const P1& p1, const P2& p2,
2573 const P3& p3) { 2684 const P3& p3) {
2574 MutantRunner<R, Tuple<>>* t = 2685 MutantRunner<R, base::Tuple<>>* t =
2575 new MutantFunction<R, R (*)(X1, X2, X3), 2686 new MutantFunction<R, R (*)(X1, X2, X3),
2576 Tuple<P1, P2, P3>, Tuple<>> 2687 base::Tuple<P1, P2, P3>, base::Tuple<>>
2577 (function, MakeTuple(p1, p2, p3)); 2688 (function, base::MakeTuple(p1, p2, p3));
2578 return MutantFunctor<R, Tuple<>>(t); 2689 return MutantFunctor<R, base::Tuple<>>(t);
2579 } 2690 }
2580 2691
2581 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 2692 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2582 template <typename R, typename T, typename U, typename P1, typename P2, 2693 template <typename R, typename T, typename U, typename P1, typename P2,
2583 typename P3, typename X1, typename X2, typename X3> 2694 typename P3, typename X1, typename X2, typename X3>
2584 inline MutantFunctor<R, Tuple<>> 2695 inline MutantFunctor<R, base::Tuple<>>
2585 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3), const P1& p1, const P2& p2, 2696 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3), const P1& p1, const P2& p2,
2586 const P3& p3) { 2697 const P3& p3) {
2587 MutantRunner<R, Tuple<>>* t = 2698 MutantRunner<R, base::Tuple<>>* t =
2588 new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3), 2699 new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3),
2589 Tuple<P1, P2, P3>, Tuple<>> 2700 base::Tuple<P1, P2, P3>, base::Tuple<>>
2590 (obj, method, MakeTuple(p1, p2, p3)); 2701 (obj, method, base::MakeTuple(p1, p2, p3));
2591 return MutantFunctor<R, Tuple<>>(t); 2702 return MutantFunctor<R, base::Tuple<>>(t);
2592 } 2703 }
2593 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 2704 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2594 2705
2595 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 2706 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
2596 template <typename R, typename T, typename U, typename P1, typename P2, 2707 template <typename R, typename T, typename U, typename P1, typename P2,
2597 typename P3, typename X1, typename X2, typename X3> 2708 typename P3, typename X1, typename X2, typename X3>
2598 inline MutantFunctor<R, Tuple<>> 2709 inline MutantFunctor<R, base::Tuple<>>
2599 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3), const P1& p1, 2710 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3), const P1& p1,
2600 const P2& p2, const P3& p3) { 2711 const P2& p2, const P3& p3) {
2601 MutantRunner<R, Tuple<>>* t = 2712 MutantRunner<R, base::Tuple<>>* t =
2602 new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3), 2713 new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3),
2603 Tuple<P1, P2, P3>, Tuple<>> 2714 base::Tuple<P1, P2, P3>, base::Tuple<>>
2604 (obj, method, MakeTuple(p1, p2, p3)); 2715 (obj, method, base::MakeTuple(p1, p2, p3));
2605 return MutantFunctor<R, Tuple<>>(t); 2716 return MutantFunctor<R, base::Tuple<>>(t);
2606 } 2717 }
2607 2718
2608 template <typename R, typename P1, typename P2, typename P3, typename X1, 2719 template <typename R, typename P1, typename P2, typename P3, typename X1,
2609 typename X2, typename X3> 2720 typename X2, typename X3>
2610 inline MutantFunctor<R, Tuple<>> 2721 inline MutantFunctor<R, base::Tuple<>>
2611 CreateFunctor(R (__stdcall *function)(X1, X2, X3), const P1& p1, const P2& p2, 2722 CreateFunctor(R (__stdcall *function)(X1, X2, X3), const P1& p1, const P2& p2,
2612 const P3& p3) { 2723 const P3& p3) {
2613 MutantRunner<R, Tuple<>>* t = 2724 MutantRunner<R, base::Tuple<>>* t =
2614 new MutantFunction<R, R (__stdcall *)(X1, X2, X3), 2725 new MutantFunction<R, R (__stdcall *)(X1, X2, X3),
2615 Tuple<P1, P2, P3>, Tuple<>> 2726 base::Tuple<P1, P2, P3>, base::Tuple<>>
2616 (function, MakeTuple(p1, p2, p3)); 2727 (function, base::MakeTuple(p1, p2, p3));
2617 return MutantFunctor<R, Tuple<>>(t); 2728 return MutantFunctor<R, base::Tuple<>>(t);
2618 } 2729 }
2619 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 2730 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2620 template <typename R, typename T, typename U, typename P1, typename P2, 2731 template <typename R, typename T, typename U, typename P1, typename P2,
2621 typename P3, typename X1, typename X2, typename X3> 2732 typename P3, typename X1, typename X2, typename X3>
2622 inline MutantFunctor<R, Tuple<>> 2733 inline MutantFunctor<R, base::Tuple<>>
2623 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3), const P1& p1, 2734 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3), const P1& p1,
2624 const P2& p2, const P3& p3) { 2735 const P2& p2, const P3& p3) {
2625 MutantRunner<R, Tuple<>>* t = 2736 MutantRunner<R, base::Tuple<>>* t =
2626 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3), 2737 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3),
2627 Tuple<P1, P2, P3>, Tuple<>> 2738 base::Tuple<P1, P2, P3>, base::Tuple<>>
2628 (obj, method, MakeTuple(p1, p2, p3)); 2739 (obj, method, base::MakeTuple(p1, p2, p3));
2629 return MutantFunctor<R, Tuple<>>(t); 2740 return MutantFunctor<R, base::Tuple<>>(t);
2630 } 2741 }
2631 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 2742 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2632 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 2743 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
2633 2744
2634 // 3 - 1 2745 // 3 - 1
2635 template <typename R, typename T, typename U, typename P1, typename P2, 2746 template <typename R, typename T, typename U, typename P1, typename P2,
2636 typename P3, typename A1, typename X1, typename X2, typename X3> 2747 typename P3, typename A1, typename X1, typename X2, typename X3>
2637 inline MutantFunctor<R, Tuple<A1>> 2748 inline MutantFunctor<R, base::Tuple<A1>>
2638 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, A1), const P1& p1, 2749 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, A1), const P1& p1,
2639 const P2& p2, const P3& p3) { 2750 const P2& p2, const P3& p3) {
2640 MutantRunner<R, Tuple<A1>>* t = 2751 MutantRunner<R, base::Tuple<A1>>* t =
2641 new Mutant<R, T, R (U::*)(X1, X2, X3, A1), 2752 new Mutant<R, T, R (U::*)(X1, X2, X3, A1),
2642 Tuple<P1, P2, P3>, Tuple<A1>> 2753 base::Tuple<P1, P2, P3>, base::Tuple<A1>>
2643 (obj, method, MakeTuple(p1, p2, p3)); 2754 (obj, method, base::MakeTuple(p1, p2, p3));
2644 return MutantFunctor<R, Tuple<A1>>(t); 2755 return MutantFunctor<R, base::Tuple<A1>>(t);
2645 } 2756 }
2646 2757
2647 template <typename R, typename P1, typename P2, typename P3, typename A1, 2758 template <typename R, typename P1, typename P2, typename P3, typename A1,
2648 typename X1, typename X2, typename X3> 2759 typename X1, typename X2, typename X3>
2649 inline MutantFunctor<R, Tuple<A1>> 2760 inline MutantFunctor<R, base::Tuple<A1>>
2650 CreateFunctor(R (*function)(X1, X2, X3, A1), const P1& p1, const P2& p2, 2761 CreateFunctor(R (*function)(X1, X2, X3, A1), const P1& p1, const P2& p2,
2651 const P3& p3) { 2762 const P3& p3) {
2652 MutantRunner<R, Tuple<A1>>* t = 2763 MutantRunner<R, base::Tuple<A1>>* t =
2653 new MutantFunction<R, R (*)(X1, X2, X3, A1), 2764 new MutantFunction<R, R (*)(X1, X2, X3, A1),
2654 Tuple<P1, P2, P3>, Tuple<A1>> 2765 base::Tuple<P1, P2, P3>, base::Tuple<A1>>
2655 (function, MakeTuple(p1, p2, p3)); 2766 (function, base::MakeTuple(p1, p2, p3));
2656 return MutantFunctor<R, Tuple<A1>>(t); 2767 return MutantFunctor<R, base::Tuple<A1>>(t);
2657 } 2768 }
2658 2769
2659 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 2770 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2660 template <typename R, typename T, typename U, typename P1, typename P2, 2771 template <typename R, typename T, typename U, typename P1, typename P2,
2661 typename P3, typename A1, typename X1, typename X2, typename X3> 2772 typename P3, typename A1, typename X1, typename X2, typename X3>
2662 inline MutantFunctor<R, Tuple<A1>> 2773 inline MutantFunctor<R, base::Tuple<A1>>
2663 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, A1), const P1& p1, 2774 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, A1), const P1& p1,
2664 const P2& p2, const P3& p3) { 2775 const P2& p2, const P3& p3) {
2665 MutantRunner<R, Tuple<A1>>* t = 2776 MutantRunner<R, base::Tuple<A1>>* t =
2666 new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, A1), 2777 new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, A1),
2667 Tuple<P1, P2, P3>, Tuple<A1>> 2778 base::Tuple<P1, P2, P3>, base::Tuple<A1>>
2668 (obj, method, MakeTuple(p1, p2, p3)); 2779 (obj, method, base::MakeTuple(p1, p2, p3));
2669 return MutantFunctor<R, Tuple<A1>>(t); 2780 return MutantFunctor<R, base::Tuple<A1>>(t);
2670 } 2781 }
2671 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 2782 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2672 2783
2673 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 2784 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
2674 template <typename R, typename T, typename U, typename P1, typename P2, 2785 template <typename R, typename T, typename U, typename P1, typename P2,
2675 typename P3, typename A1, typename X1, typename X2, typename X3> 2786 typename P3, typename A1, typename X1, typename X2, typename X3>
2676 inline MutantFunctor<R, Tuple<A1>> 2787 inline MutantFunctor<R, base::Tuple<A1>>
2677 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, A1), const P1& p1, 2788 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, A1), const P1& p1,
2678 const P2& p2, const P3& p3) { 2789 const P2& p2, const P3& p3) {
2679 MutantRunner<R, Tuple<A1>>* t = 2790 MutantRunner<R, base::Tuple<A1>>* t =
2680 new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, A1), 2791 new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, A1),
2681 Tuple<P1, P2, P3>, Tuple<A1>> 2792 base::Tuple<P1, P2, P3>, base::Tuple<A1>>
2682 (obj, method, MakeTuple(p1, p2, p3)); 2793 (obj, method, base::MakeTuple(p1, p2, p3));
2683 return MutantFunctor<R, Tuple<A1>>(t); 2794 return MutantFunctor<R, base::Tuple<A1>>(t);
2684 } 2795 }
2685 2796
2686 template <typename R, typename P1, typename P2, typename P3, typename A1, 2797 template <typename R, typename P1, typename P2, typename P3, typename A1,
2687 typename X1, typename X2, typename X3> 2798 typename X1, typename X2, typename X3>
2688 inline MutantFunctor<R, Tuple<A1>> 2799 inline MutantFunctor<R, base::Tuple<A1>>
2689 CreateFunctor(R (__stdcall *function)(X1, X2, X3, A1), const P1& p1, 2800 CreateFunctor(R (__stdcall *function)(X1, X2, X3, A1), const P1& p1,
2690 const P2& p2, const P3& p3) { 2801 const P2& p2, const P3& p3) {
2691 MutantRunner<R, Tuple<A1>>* t = 2802 MutantRunner<R, base::Tuple<A1>>* t =
2692 new MutantFunction<R, R (__stdcall *)(X1, X2, X3, A1), 2803 new MutantFunction<R, R (__stdcall *)(X1, X2, X3, A1),
2693 Tuple<P1, P2, P3>, Tuple<A1>> 2804 base::Tuple<P1, P2, P3>, base::Tuple<A1>>
2694 (function, MakeTuple(p1, p2, p3)); 2805 (function, base::MakeTuple(p1, p2, p3));
2695 return MutantFunctor<R, Tuple<A1>>(t); 2806 return MutantFunctor<R, base::Tuple<A1>>(t);
2696 } 2807 }
2697 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 2808 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2698 template <typename R, typename T, typename U, typename P1, typename P2, 2809 template <typename R, typename T, typename U, typename P1, typename P2,
2699 typename P3, typename A1, typename X1, typename X2, typename X3> 2810 typename P3, typename A1, typename X1, typename X2, typename X3>
2700 inline MutantFunctor<R, Tuple<A1>> 2811 inline MutantFunctor<R, base::Tuple<A1>>
2701 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, A1), const P1& p1, 2812 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, A1), const P1& p1,
2702 const P2& p2, const P3& p3) { 2813 const P2& p2, const P3& p3) {
2703 MutantRunner<R, Tuple<A1>>* t = 2814 MutantRunner<R, base::Tuple<A1>>* t =
2704 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, A1), 2815 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, A1),
2705 Tuple<P1, P2, P3>, Tuple<A1>> 2816 base::Tuple<P1, P2, P3>, base::Tuple<A1>>
2706 (obj, method, MakeTuple(p1, p2, p3)); 2817 (obj, method, base::MakeTuple(p1, p2, p3));
2707 return MutantFunctor<R, Tuple<A1>>(t); 2818 return MutantFunctor<R, base::Tuple<A1>>(t);
2708 } 2819 }
2709 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 2820 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2710 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 2821 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
2711 2822
2712 // 3 - 2 2823 // 3 - 2
2713 template <typename R, typename T, typename U, typename P1, typename P2, 2824 template <typename R, typename T, typename U, typename P1, typename P2,
2714 typename P3, typename A1, typename A2, typename X1, typename X2, 2825 typename P3, typename A1, typename A2, typename X1, typename X2,
2715 typename X3> 2826 typename X3>
2716 inline MutantFunctor<R, Tuple<A1, A2>> 2827 inline MutantFunctor<R, base::Tuple<A1, A2>>
2717 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, A1, A2), const P1& p1, 2828 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, A1, A2), const P1& p1,
2718 const P2& p2, const P3& p3) { 2829 const P2& p2, const P3& p3) {
2719 MutantRunner<R, Tuple<A1, A2>>* t = 2830 MutantRunner<R, base::Tuple<A1, A2>>* t =
2720 new Mutant<R, T, R (U::*)(X1, X2, X3, A1, A2), 2831 new Mutant<R, T, R (U::*)(X1, X2, X3, A1, A2),
2721 Tuple<P1, P2, P3>, Tuple<A1, A2>> 2832 base::Tuple<P1, P2, P3>, base::Tuple<A1, A2>>
2722 (obj, method, MakeTuple(p1, p2, p3)); 2833 (obj, method, base::MakeTuple(p1, p2, p3));
2723 return MutantFunctor<R, Tuple<A1, A2>>(t); 2834 return MutantFunctor<R, base::Tuple<A1, A2>>(t);
2724 } 2835 }
2725 2836
2726 template <typename R, typename P1, typename P2, typename P3, typename A1, 2837 template <typename R, typename P1, typename P2, typename P3, typename A1,
2727 typename A2, typename X1, typename X2, typename X3> 2838 typename A2, typename X1, typename X2, typename X3>
2728 inline MutantFunctor<R, Tuple<A1, A2>> 2839 inline MutantFunctor<R, base::Tuple<A1, A2>>
2729 CreateFunctor(R (*function)(X1, X2, X3, A1, A2), const P1& p1, const P2& p2, 2840 CreateFunctor(R (*function)(X1, X2, X3, A1, A2), const P1& p1, const P2& p2,
2730 const P3& p3) { 2841 const P3& p3) {
2731 MutantRunner<R, Tuple<A1, A2>>* t = 2842 MutantRunner<R, base::Tuple<A1, A2>>* t =
2732 new MutantFunction<R, R (*)(X1, X2, X3, A1, A2), 2843 new MutantFunction<R, R (*)(X1, X2, X3, A1, A2),
2733 Tuple<P1, P2, P3>, Tuple<A1, A2>> 2844 base::Tuple<P1, P2, P3>, base::Tuple<A1, A2>>
2734 (function, MakeTuple(p1, p2, p3)); 2845 (function, base::MakeTuple(p1, p2, p3));
2735 return MutantFunctor<R, Tuple<A1, A2>>(t); 2846 return MutantFunctor<R, base::Tuple<A1, A2>>(t);
2736 } 2847 }
2737 2848
2738 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 2849 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2739 template <typename R, typename T, typename U, typename P1, typename P2, 2850 template <typename R, typename T, typename U, typename P1, typename P2,
2740 typename P3, typename A1, typename A2, typename X1, typename X2, 2851 typename P3, typename A1, typename A2, typename X1, typename X2,
2741 typename X3> 2852 typename X3>
2742 inline MutantFunctor<R, Tuple<A1, A2>> 2853 inline MutantFunctor<R, base::Tuple<A1, A2>>
2743 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, A1, A2), const P1& p1, 2854 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, A1, A2), const P1& p1,
2744 const P2& p2, const P3& p3) { 2855 const P2& p2, const P3& p3) {
2745 MutantRunner<R, Tuple<A1, A2>>* t = 2856 MutantRunner<R, base::Tuple<A1, A2>>* t =
2746 new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, A1, A2), 2857 new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, A1, A2),
2747 Tuple<P1, P2, P3>, Tuple<A1, A2>> 2858 base::Tuple<P1, P2, P3>, base::Tuple<A1, A2>>
2748 (obj, method, MakeTuple(p1, p2, p3)); 2859 (obj, method, base::MakeTuple(p1, p2, p3));
2749 return MutantFunctor<R, Tuple<A1, A2>>(t); 2860 return MutantFunctor<R, base::Tuple<A1, A2>>(t);
2750 } 2861 }
2751 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 2862 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2752 2863
2753 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 2864 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
2754 template <typename R, typename T, typename U, typename P1, typename P2, 2865 template <typename R, typename T, typename U, typename P1, typename P2,
2755 typename P3, typename A1, typename A2, typename X1, typename X2, 2866 typename P3, typename A1, typename A2, typename X1, typename X2,
2756 typename X3> 2867 typename X3>
2757 inline MutantFunctor<R, Tuple<A1, A2>> 2868 inline MutantFunctor<R, base::Tuple<A1, A2>>
2758 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, A1, A2), 2869 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, A1, A2),
2759 const P1& p1, const P2& p2, const P3& p3) { 2870 const P1& p1, const P2& p2, const P3& p3) {
2760 MutantRunner<R, Tuple<A1, A2>>* t = 2871 MutantRunner<R, base::Tuple<A1, A2>>* t =
2761 new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, A1, A2), 2872 new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, A1, A2),
2762 Tuple<P1, P2, P3>, Tuple<A1, A2>> 2873 base::Tuple<P1, P2, P3>, base::Tuple<A1, A2>>
2763 (obj, method, MakeTuple(p1, p2, p3)); 2874 (obj, method, base::MakeTuple(p1, p2, p3));
2764 return MutantFunctor<R, Tuple<A1, A2>>(t); 2875 return MutantFunctor<R, base::Tuple<A1, A2>>(t);
2765 } 2876 }
2766 2877
2767 template <typename R, typename P1, typename P2, typename P3, typename A1, 2878 template <typename R, typename P1, typename P2, typename P3, typename A1,
2768 typename A2, typename X1, typename X2, typename X3> 2879 typename A2, typename X1, typename X2, typename X3>
2769 inline MutantFunctor<R, Tuple<A1, A2>> 2880 inline MutantFunctor<R, base::Tuple<A1, A2>>
2770 CreateFunctor(R (__stdcall *function)(X1, X2, X3, A1, A2), const P1& p1, 2881 CreateFunctor(R (__stdcall *function)(X1, X2, X3, A1, A2), const P1& p1,
2771 const P2& p2, const P3& p3) { 2882 const P2& p2, const P3& p3) {
2772 MutantRunner<R, Tuple<A1, A2>>* t = 2883 MutantRunner<R, base::Tuple<A1, A2>>* t =
2773 new MutantFunction<R, R (__stdcall *)(X1, X2, X3, A1, A2), 2884 new MutantFunction<R, R (__stdcall *)(X1, X2, X3, A1, A2),
2774 Tuple<P1, P2, P3>, Tuple<A1, A2>> 2885 base::Tuple<P1, P2, P3>, base::Tuple<A1, A2>>
2775 (function, MakeTuple(p1, p2, p3)); 2886 (function, base::MakeTuple(p1, p2, p3));
2776 return MutantFunctor<R, Tuple<A1, A2>>(t); 2887 return MutantFunctor<R, base::Tuple<A1, A2>>(t);
2777 } 2888 }
2778 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 2889 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2779 template <typename R, typename T, typename U, typename P1, typename P2, 2890 template <typename R, typename T, typename U, typename P1, typename P2,
2780 typename P3, typename A1, typename A2, typename X1, typename X2, 2891 typename P3, typename A1, typename A2, typename X1, typename X2,
2781 typename X3> 2892 typename X3>
2782 inline MutantFunctor<R, Tuple<A1, A2>> 2893 inline MutantFunctor<R, base::Tuple<A1, A2>>
2783 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, A1, A2), 2894 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, A1, A2),
2784 const P1& p1, const P2& p2, const P3& p3) { 2895 const P1& p1, const P2& p2, const P3& p3) {
2785 MutantRunner<R, Tuple<A1, A2>>* t = 2896 MutantRunner<R, base::Tuple<A1, A2>>* t =
2786 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, A1, A2), 2897 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, A1, A2),
2787 Tuple<P1, P2, P3>, Tuple<A1, A2>> 2898 base::Tuple<P1, P2, P3>, base::Tuple<A1, A2>>
2788 (obj, method, MakeTuple(p1, p2, p3)); 2899 (obj, method, base::MakeTuple(p1, p2, p3));
2789 return MutantFunctor<R, Tuple<A1, A2>>(t); 2900 return MutantFunctor<R, base::Tuple<A1, A2>>(t);
2790 } 2901 }
2791 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 2902 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2792 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 2903 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
2793 2904
2794 // 3 - 3 2905 // 3 - 3
2795 template <typename R, typename T, typename U, typename P1, typename P2, 2906 template <typename R, typename T, typename U, typename P1, typename P2,
2796 typename P3, typename A1, typename A2, typename A3, typename X1, 2907 typename P3, typename A1, typename A2, typename A3, typename X1,
2797 typename X2, typename X3> 2908 typename X2, typename X3>
2798 inline MutantFunctor<R, Tuple<A1, A2, A3>> 2909 inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
2799 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, A1, A2, A3), const P1& p1, 2910 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, A1, A2, A3), const P1& p1,
2800 const P2& p2, const P3& p3) { 2911 const P2& p2, const P3& p3) {
2801 MutantRunner<R, Tuple<A1, A2, A3>>* t = 2912 MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
2802 new Mutant<R, T, R (U::*)(X1, X2, X3, A1, A2, A3), 2913 new Mutant<R, T, R (U::*)(X1, X2, X3, A1, A2, A3),
2803 Tuple<P1, P2, P3>, Tuple<A1, A2, A3>> 2914 base::Tuple<P1, P2, P3>, base::Tuple<A1, A2, A3>>
2804 (obj, method, MakeTuple(p1, p2, p3)); 2915 (obj, method, base::MakeTuple(p1, p2, p3));
2805 return MutantFunctor<R, Tuple<A1, A2, A3>>(t); 2916 return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
2806 } 2917 }
2807 2918
2808 template <typename R, typename P1, typename P2, typename P3, typename A1, 2919 template <typename R, typename P1, typename P2, typename P3, typename A1,
2809 typename A2, typename A3, typename X1, typename X2, typename X3> 2920 typename A2, typename A3, typename X1, typename X2, typename X3>
2810 inline MutantFunctor<R, Tuple<A1, A2, A3>> 2921 inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
2811 CreateFunctor(R (*function)(X1, X2, X3, A1, A2, A3), const P1& p1, const P2& p2, 2922 CreateFunctor(R (*function)(X1, X2, X3, A1, A2, A3), const P1& p1, const P2& p2,
2812 const P3& p3) { 2923 const P3& p3) {
2813 MutantRunner<R, Tuple<A1, A2, A3>>* t = 2924 MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
2814 new MutantFunction<R, R (*)(X1, X2, X3, A1, A2, A3), 2925 new MutantFunction<R, R (*)(X1, X2, X3, A1, A2, A3),
2815 Tuple<P1, P2, P3>, Tuple<A1, A2, A3>> 2926 base::Tuple<P1, P2, P3>, base::Tuple<A1, A2, A3>>
2816 (function, MakeTuple(p1, p2, p3)); 2927 (function, base::MakeTuple(p1, p2, p3));
2817 return MutantFunctor<R, Tuple<A1, A2, A3>>(t); 2928 return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
2818 } 2929 }
2819 2930
2820 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 2931 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2821 template <typename R, typename T, typename U, typename P1, typename P2, 2932 template <typename R, typename T, typename U, typename P1, typename P2,
2822 typename P3, typename A1, typename A2, typename A3, typename X1, 2933 typename P3, typename A1, typename A2, typename A3, typename X1,
2823 typename X2, typename X3> 2934 typename X2, typename X3>
2824 inline MutantFunctor<R, Tuple<A1, A2, A3>> 2935 inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
2825 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, A1, A2, A3), const P1& p1, 2936 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, A1, A2, A3), const P1& p1,
2826 const P2& p2, const P3& p3) { 2937 const P2& p2, const P3& p3) {
2827 MutantRunner<R, Tuple<A1, A2, A3>>* t = 2938 MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
2828 new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, A1, A2, A3), 2939 new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, A1, A2, A3),
2829 Tuple<P1, P2, P3>, Tuple<A1, A2, A3>> 2940 base::Tuple<P1, P2, P3>, base::Tuple<A1, A2, A3>>
2830 (obj, method, MakeTuple(p1, p2, p3)); 2941 (obj, method, base::MakeTuple(p1, p2, p3));
2831 return MutantFunctor<R, Tuple<A1, A2, A3>>(t); 2942 return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
2832 } 2943 }
2833 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 2944 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2834 2945
2835 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 2946 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
2836 template <typename R, typename T, typename U, typename P1, typename P2, 2947 template <typename R, typename T, typename U, typename P1, typename P2,
2837 typename P3, typename A1, typename A2, typename A3, typename X1, 2948 typename P3, typename A1, typename A2, typename A3, typename X1,
2838 typename X2, typename X3> 2949 typename X2, typename X3>
2839 inline MutantFunctor<R, Tuple<A1, A2, A3>> 2950 inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
2840 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, A1, A2, A3), 2951 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, A1, A2, A3),
2841 const P1& p1, const P2& p2, const P3& p3) { 2952 const P1& p1, const P2& p2, const P3& p3) {
2842 MutantRunner<R, Tuple<A1, A2, A3>>* t = 2953 MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
2843 new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, A1, A2, A3), 2954 new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, A1, A2, A3),
2844 Tuple<P1, P2, P3>, Tuple<A1, A2, A3>> 2955 base::Tuple<P1, P2, P3>, base::Tuple<A1, A2, A3>>
2845 (obj, method, MakeTuple(p1, p2, p3)); 2956 (obj, method, base::MakeTuple(p1, p2, p3));
2846 return MutantFunctor<R, Tuple<A1, A2, A3>>(t); 2957 return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
2847 } 2958 }
2848 2959
2849 template <typename R, typename P1, typename P2, typename P3, typename A1, 2960 template <typename R, typename P1, typename P2, typename P3, typename A1,
2850 typename A2, typename A3, typename X1, typename X2, typename X3> 2961 typename A2, typename A3, typename X1, typename X2, typename X3>
2851 inline MutantFunctor<R, Tuple<A1, A2, A3>> 2962 inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
2852 CreateFunctor(R (__stdcall *function)(X1, X2, X3, A1, A2, A3), const P1& p1, 2963 CreateFunctor(R (__stdcall *function)(X1, X2, X3, A1, A2, A3), const P1& p1,
2853 const P2& p2, const P3& p3) { 2964 const P2& p2, const P3& p3) {
2854 MutantRunner<R, Tuple<A1, A2, A3>>* t = 2965 MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
2855 new MutantFunction<R, R (__stdcall *)(X1, X2, X3, A1, A2, A3), 2966 new MutantFunction<R, R (__stdcall *)(X1, X2, X3, A1, A2, A3),
2856 Tuple<P1, P2, P3>, Tuple<A1, A2, A3>> 2967 base::Tuple<P1, P2, P3>, base::Tuple<A1, A2, A3>>
2857 (function, MakeTuple(p1, p2, p3)); 2968 (function, base::MakeTuple(p1, p2, p3));
2858 return MutantFunctor<R, Tuple<A1, A2, A3>>(t); 2969 return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
2859 } 2970 }
2860 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 2971 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2861 template <typename R, typename T, typename U, typename P1, typename P2, 2972 template <typename R, typename T, typename U, typename P1, typename P2,
2862 typename P3, typename A1, typename A2, typename A3, typename X1, 2973 typename P3, typename A1, typename A2, typename A3, typename X1,
2863 typename X2, typename X3> 2974 typename X2, typename X3>
2864 inline MutantFunctor<R, Tuple<A1, A2, A3>> 2975 inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
2865 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, A1, A2, A3), 2976 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, A1, A2, A3),
2866 const P1& p1, const P2& p2, const P3& p3) { 2977 const P1& p1, const P2& p2, const P3& p3) {
2867 MutantRunner<R, Tuple<A1, A2, A3>>* t = 2978 MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
2868 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, A1, A2, A3), 2979 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, A1, A2, A3),
2869 Tuple<P1, P2, P3>, Tuple<A1, A2, A3>> 2980 base::Tuple<P1, P2, P3>, base::Tuple<A1, A2, A3>>
2870 (obj, method, MakeTuple(p1, p2, p3)); 2981 (obj, method, base::MakeTuple(p1, p2, p3));
2871 return MutantFunctor<R, Tuple<A1, A2, A3>>(t); 2982 return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
2872 } 2983 }
2873 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 2984 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2874 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 2985 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
2875 2986
2876 // 3 - 4 2987 // 3 - 4
2877 template <typename R, typename T, typename U, typename P1, typename P2, 2988 template <typename R, typename T, typename U, typename P1, typename P2,
2878 typename P3, typename A1, typename A2, typename A3, typename A4, 2989 typename P3, typename A1, typename A2, typename A3, typename A4,
2879 typename X1, typename X2, typename X3> 2990 typename X1, typename X2, typename X3>
2880 inline MutantFunctor<R, Tuple<A1, A2, A3, A4>> 2991 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
2881 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, A1, A2, A3, A4), const P1& p1, 2992 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, A1, A2, A3, A4), const P1& p1,
2882 const P2& p2, const P3& p3) { 2993 const P2& p2, const P3& p3) {
2883 MutantRunner<R, Tuple<A1, A2, A3, A4>>* t = 2994 MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
2884 new Mutant<R, T, R (U::*)(X1, X2, X3, A1, A2, A3, A4), 2995 new Mutant<R, T, R (U::*)(X1, X2, X3, A1, A2, A3, A4),
2885 Tuple<P1, P2, P3>, Tuple<A1, A2, A3, A4>> 2996 base::Tuple<P1, P2, P3>, base::Tuple<A1, A2, A3, A4>>
2886 (obj, method, MakeTuple(p1, p2, p3)); 2997 (obj, method, base::MakeTuple(p1, p2, p3));
2887 return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t); 2998 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
2888 } 2999 }
2889 3000
2890 template <typename R, typename P1, typename P2, typename P3, typename A1, 3001 template <typename R, typename P1, typename P2, typename P3, typename A1,
2891 typename A2, typename A3, typename A4, typename X1, typename X2, 3002 typename A2, typename A3, typename A4, typename X1, typename X2,
2892 typename X3> 3003 typename X3>
2893 inline MutantFunctor<R, Tuple<A1, A2, A3, A4>> 3004 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
2894 CreateFunctor(R (*function)(X1, X2, X3, A1, A2, A3, A4), const P1& p1, 3005 CreateFunctor(R (*function)(X1, X2, X3, A1, A2, A3, A4), const P1& p1,
2895 const P2& p2, const P3& p3) { 3006 const P2& p2, const P3& p3) {
2896 MutantRunner<R, Tuple<A1, A2, A3, A4>>* t = 3007 MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
2897 new MutantFunction<R, R (*)(X1, X2, X3, A1, A2, A3, A4), 3008 new MutantFunction<R, R (*)(X1, X2, X3, A1, A2, A3, A4),
2898 Tuple<P1, P2, P3>, Tuple<A1, A2, A3, A4>> 3009 base::Tuple<P1, P2, P3>, base::Tuple<A1, A2, A3, A4>>
2899 (function, MakeTuple(p1, p2, p3)); 3010 (function, base::MakeTuple(p1, p2, p3));
2900 return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t); 3011 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
2901 } 3012 }
2902 3013
2903 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 3014 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2904 template <typename R, typename T, typename U, typename P1, typename P2, 3015 template <typename R, typename T, typename U, typename P1, typename P2,
2905 typename P3, typename A1, typename A2, typename A3, typename A4, 3016 typename P3, typename A1, typename A2, typename A3, typename A4,
2906 typename X1, typename X2, typename X3> 3017 typename X1, typename X2, typename X3>
2907 inline MutantFunctor<R, Tuple<A1, A2, A3, A4>> 3018 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
2908 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, A1, A2, A3, A4), const P1& p1, 3019 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, A1, A2, A3, A4), const P1& p1,
2909 const P2& p2, const P3& p3) { 3020 const P2& p2, const P3& p3) {
2910 MutantRunner<R, Tuple<A1, A2, A3, A4>>* t = 3021 MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
2911 new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, A1, A2, A3, A4), 3022 new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, A1, A2, A3, A4),
2912 Tuple<P1, P2, P3>, Tuple<A1, A2, A3, A4>> 3023 base::Tuple<P1, P2, P3>, base::Tuple<A1, A2, A3, A4>>
2913 (obj, method, MakeTuple(p1, p2, p3)); 3024 (obj, method, base::MakeTuple(p1, p2, p3));
2914 return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t); 3025 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
2915 } 3026 }
2916 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 3027 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2917 3028
2918 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 3029 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
2919 template <typename R, typename T, typename U, typename P1, typename P2, 3030 template <typename R, typename T, typename U, typename P1, typename P2,
2920 typename P3, typename A1, typename A2, typename A3, typename A4, 3031 typename P3, typename A1, typename A2, typename A3, typename A4,
2921 typename X1, typename X2, typename X3> 3032 typename X1, typename X2, typename X3>
2922 inline MutantFunctor<R, Tuple<A1, A2, A3, A4>> 3033 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
2923 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, A1, A2, A3, A4), 3034 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, A1, A2, A3, A4),
2924 const P1& p1, const P2& p2, const P3& p3) { 3035 const P1& p1, const P2& p2, const P3& p3) {
2925 MutantRunner<R, Tuple<A1, A2, A3, A4>>* t = 3036 MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
2926 new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, A1, A2, A3, A4), 3037 new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, A1, A2, A3, A4),
2927 Tuple<P1, P2, P3>, Tuple<A1, A2, A3, A4>> 3038 base::Tuple<P1, P2, P3>, base::Tuple<A1, A2, A3, A4>>
2928 (obj, method, MakeTuple(p1, p2, p3)); 3039 (obj, method, base::MakeTuple(p1, p2, p3));
2929 return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t); 3040 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
2930 } 3041 }
2931 3042
2932 template <typename R, typename P1, typename P2, typename P3, typename A1, 3043 template <typename R, typename P1, typename P2, typename P3, typename A1,
2933 typename A2, typename A3, typename A4, typename X1, typename X2, 3044 typename A2, typename A3, typename A4, typename X1, typename X2,
2934 typename X3> 3045 typename X3>
2935 inline MutantFunctor<R, Tuple<A1, A2, A3, A4>> 3046 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
2936 CreateFunctor(R (__stdcall *function)(X1, X2, X3, A1, A2, A3, A4), const P1& p1, 3047 CreateFunctor(R (__stdcall *function)(X1, X2, X3, A1, A2, A3, A4), const P1& p1,
2937 const P2& p2, const P3& p3) { 3048 const P2& p2, const P3& p3) {
2938 MutantRunner<R, Tuple<A1, A2, A3, A4>>* t = 3049 MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
2939 new MutantFunction<R, R (__stdcall *)(X1, X2, X3, A1, A2, A3, A4), 3050 new MutantFunction<R, R (__stdcall *)(X1, X2, X3, A1, A2, A3, A4),
2940 Tuple<P1, P2, P3>, Tuple<A1, A2, A3, A4>> 3051 base::Tuple<P1, P2, P3>, base::Tuple<A1, A2, A3, A4>>
2941 (function, MakeTuple(p1, p2, p3)); 3052 (function, base::MakeTuple(p1, p2, p3));
2942 return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t); 3053 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
2943 } 3054 }
2944 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 3055 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2945 template <typename R, typename T, typename U, typename P1, typename P2, 3056 template <typename R, typename T, typename U, typename P1, typename P2,
2946 typename P3, typename A1, typename A2, typename A3, typename A4, 3057 typename P3, typename A1, typename A2, typename A3, typename A4,
2947 typename X1, typename X2, typename X3> 3058 typename X1, typename X2, typename X3>
2948 inline MutantFunctor<R, Tuple<A1, A2, A3, A4>> 3059 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
2949 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, A1, A2, A3, A4), 3060 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, A1, A2, A3, A4),
2950 const P1& p1, const P2& p2, const P3& p3) { 3061 const P1& p1, const P2& p2, const P3& p3) {
2951 MutantRunner<R, Tuple<A1, A2, A3, A4>>* t = 3062 MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
2952 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, A1, A2, A3, A4), 3063 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, A1, A2, A3, A4),
2953 Tuple<P1, P2, P3>, Tuple<A1, A2, A3, A4>> 3064 base::Tuple<P1, P2, P3>, base::Tuple<A1, A2, A3, A4>>
2954 (obj, method, MakeTuple(p1, p2, p3)); 3065 (obj, method, base::MakeTuple(p1, p2, p3));
2955 return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t); 3066 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
2956 } 3067 }
2957 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 3068 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2958 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 3069 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
2959 3070
2960 // 3 - 5 3071 // 3 - 5
2961 template <typename R, typename T, typename U, typename P1, typename P2, 3072 template <typename R, typename T, typename U, typename P1, typename P2,
2962 typename P3, typename A1, typename A2, typename A3, typename A4, 3073 typename P3, typename A1, typename A2, typename A3, typename A4,
2963 typename A5, typename X1, typename X2, typename X3> 3074 typename A5, typename X1, typename X2, typename X3>
2964 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>> 3075 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
2965 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, A1, A2, A3, A4, A5), 3076 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, A1, A2, A3, A4, A5),
2966 const P1& p1, const P2& p2, const P3& p3) { 3077 const P1& p1, const P2& p2, const P3& p3) {
2967 MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t = 3078 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
2968 new Mutant<R, T, R (U::*)(X1, X2, X3, A1, A2, A3, A4, A5), 3079 new Mutant<R, T, R (U::*)(X1, X2, X3, A1, A2, A3, A4, A5),
2969 Tuple<P1, P2, P3>, Tuple<A1, A2, A3, A4, A5>> 3080 base::Tuple<P1, P2, P3>, base::Tuple<A1, A2, A3, A4, A5>>
2970 (obj, method, MakeTuple(p1, p2, p3)); 3081 (obj, method, base::MakeTuple(p1, p2, p3));
2971 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t); 3082 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
2972 } 3083 }
2973 3084
2974 template <typename R, typename P1, typename P2, typename P3, typename A1, 3085 template <typename R, typename P1, typename P2, typename P3, typename A1,
2975 typename A2, typename A3, typename A4, typename A5, typename X1, 3086 typename A2, typename A3, typename A4, typename A5, typename X1,
2976 typename X2, typename X3> 3087 typename X2, typename X3>
2977 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>> 3088 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
2978 CreateFunctor(R (*function)(X1, X2, X3, A1, A2, A3, A4, A5), const P1& p1, 3089 CreateFunctor(R (*function)(X1, X2, X3, A1, A2, A3, A4, A5), const P1& p1,
2979 const P2& p2, const P3& p3) { 3090 const P2& p2, const P3& p3) {
2980 MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t = 3091 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
2981 new MutantFunction<R, R (*)(X1, X2, X3, A1, A2, A3, A4, A5), 3092 new MutantFunction<R, R (*)(X1, X2, X3, A1, A2, A3, A4, A5),
2982 Tuple<P1, P2, P3>, Tuple<A1, A2, A3, A4, A5>> 3093 base::Tuple<P1, P2, P3>, base::Tuple<A1, A2, A3, A4,
2983 (function, MakeTuple(p1, p2, p3)); 3094 A5>>
2984 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t); 3095 (function, base::MakeTuple(p1, p2, p3));
3096 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
2985 } 3097 }
2986 3098
2987 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 3099 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2988 template <typename R, typename T, typename U, typename P1, typename P2, 3100 template <typename R, typename T, typename U, typename P1, typename P2,
2989 typename P3, typename A1, typename A2, typename A3, typename A4, 3101 typename P3, typename A1, typename A2, typename A3, typename A4,
2990 typename A5, typename X1, typename X2, typename X3> 3102 typename A5, typename X1, typename X2, typename X3>
2991 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>> 3103 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
2992 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, A1, A2, A3, A4, A5), 3104 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, A1, A2, A3, A4, A5),
2993 const P1& p1, const P2& p2, const P3& p3) { 3105 const P1& p1, const P2& p2, const P3& p3) {
2994 MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t = 3106 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
2995 new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, A1, A2, A3, A4, A5), 3107 new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, A1, A2, A3, A4, A5),
2996 Tuple<P1, P2, P3>, Tuple<A1, A2, A3, A4, A5>> 3108 base::Tuple<P1, P2, P3>, base::Tuple<A1, A2, A3, A4, A5>>
2997 (obj, method, MakeTuple(p1, p2, p3)); 3109 (obj, method, base::MakeTuple(p1, p2, p3));
2998 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t); 3110 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
2999 } 3111 }
3000 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 3112 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3001 3113
3002 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 3114 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
3003 template <typename R, typename T, typename U, typename P1, typename P2, 3115 template <typename R, typename T, typename U, typename P1, typename P2,
3004 typename P3, typename A1, typename A2, typename A3, typename A4, 3116 typename P3, typename A1, typename A2, typename A3, typename A4,
3005 typename A5, typename X1, typename X2, typename X3> 3117 typename A5, typename X1, typename X2, typename X3>
3006 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>> 3118 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
3007 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, A1, A2, A3, A4, A5), 3119 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, A1, A2, A3, A4, A5),
3008 const P1& p1, const P2& p2, const P3& p3) { 3120 const P1& p1, const P2& p2, const P3& p3) {
3009 MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t = 3121 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
3010 new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, A1, A2, A3, A4, A5), 3122 new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, A1, A2, A3, A4, A5),
3011 Tuple<P1, P2, P3>, Tuple<A1, A2, A3, A4, A5>> 3123 base::Tuple<P1, P2, P3>, base::Tuple<A1, A2, A3, A4, A5>>
3012 (obj, method, MakeTuple(p1, p2, p3)); 3124 (obj, method, base::MakeTuple(p1, p2, p3));
3013 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t); 3125 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
3014 } 3126 }
3015 3127
3016 template <typename R, typename P1, typename P2, typename P3, typename A1, 3128 template <typename R, typename P1, typename P2, typename P3, typename A1,
3017 typename A2, typename A3, typename A4, typename A5, typename X1, 3129 typename A2, typename A3, typename A4, typename A5, typename X1,
3018 typename X2, typename X3> 3130 typename X2, typename X3>
3019 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>> 3131 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
3020 CreateFunctor(R (__stdcall *function)(X1, X2, X3, A1, A2, A3, A4, A5), 3132 CreateFunctor(R (__stdcall *function)(X1, X2, X3, A1, A2, A3, A4, A5),
3021 const P1& p1, const P2& p2, const P3& p3) { 3133 const P1& p1, const P2& p2, const P3& p3) {
3022 MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t = 3134 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
3023 new MutantFunction<R, R (__stdcall *)(X1, X2, X3, A1, A2, A3, A4, A5), 3135 new MutantFunction<R, R (__stdcall *)(X1, X2, X3, A1, A2, A3, A4, A5),
3024 Tuple<P1, P2, P3>, Tuple<A1, A2, A3, A4, A5>> 3136 base::Tuple<P1, P2, P3>, base::Tuple<A1, A2, A3, A4,
3025 (function, MakeTuple(p1, p2, p3)); 3137 A5>>
3026 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t); 3138 (function, base::MakeTuple(p1, p2, p3));
3139 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
3027 } 3140 }
3028 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 3141 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3029 template <typename R, typename T, typename U, typename P1, typename P2, 3142 template <typename R, typename T, typename U, typename P1, typename P2,
3030 typename P3, typename A1, typename A2, typename A3, typename A4, 3143 typename P3, typename A1, typename A2, typename A3, typename A4,
3031 typename A5, typename X1, typename X2, typename X3> 3144 typename A5, typename X1, typename X2, typename X3>
3032 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>> 3145 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
3033 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, A1, A2, A3, A4, A5), 3146 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, A1, A2, A3, A4, A5),
3034 const P1& p1, const P2& p2, const P3& p3) { 3147 const P1& p1, const P2& p2, const P3& p3) {
3035 MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t = 3148 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
3036 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, A1, A2, A3, A4, A5), 3149 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, A1, A2, A3, A4, A5),
3037 Tuple<P1, P2, P3>, Tuple<A1, A2, A3, A4, A5>> 3150 base::Tuple<P1, P2, P3>, base::Tuple<A1, A2, A3, A4, A5>>
3038 (obj, method, MakeTuple(p1, p2, p3)); 3151 (obj, method, base::MakeTuple(p1, p2, p3));
3039 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t); 3152 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
3040 } 3153 }
3041 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 3154 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3042 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 3155 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
3043 3156
3044 // 3 - 6 3157 // 3 - 6
3045 template <typename R, typename T, typename U, typename P1, typename P2, 3158 template <typename R, typename T, typename U, typename P1, typename P2,
3046 typename P3, typename A1, typename A2, typename A3, typename A4, 3159 typename P3, typename A1, typename A2, typename A3, typename A4,
3047 typename A5, typename A6, typename X1, typename X2, typename X3> 3160 typename A5, typename A6, typename X1, typename X2, typename X3>
3048 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>> 3161 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
3049 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, A1, A2, A3, A4, A5, A6), 3162 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, A1, A2, A3, A4, A5, A6),
3050 const P1& p1, const P2& p2, const P3& p3) { 3163 const P1& p1, const P2& p2, const P3& p3) {
3051 MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t = 3164 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
3052 new Mutant<R, T, R (U::*)(X1, X2, X3, A1, A2, A3, A4, A5, A6), 3165 new Mutant<R, T, R (U::*)(X1, X2, X3, A1, A2, A3, A4, A5, A6),
3053 Tuple<P1, P2, P3>, Tuple<A1, A2, A3, A4, A5, A6>> 3166 base::Tuple<P1, P2, P3>, base::Tuple<A1, A2, A3, A4, A5, A6>>
3054 (obj, method, MakeTuple(p1, p2, p3)); 3167 (obj, method, base::MakeTuple(p1, p2, p3));
3055 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t); 3168 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
3056 } 3169 }
3057 3170
3058 template <typename R, typename P1, typename P2, typename P3, typename A1, 3171 template <typename R, typename P1, typename P2, typename P3, typename A1,
3059 typename A2, typename A3, typename A4, typename A5, typename A6, 3172 typename A2, typename A3, typename A4, typename A5, typename A6,
3060 typename X1, typename X2, typename X3> 3173 typename X1, typename X2, typename X3>
3061 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>> 3174 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
3062 CreateFunctor(R (*function)(X1, X2, X3, A1, A2, A3, A4, A5, A6), const P1& p1, 3175 CreateFunctor(R (*function)(X1, X2, X3, A1, A2, A3, A4, A5, A6), const P1& p1,
3063 const P2& p2, const P3& p3) { 3176 const P2& p2, const P3& p3) {
3064 MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t = 3177 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
3065 new MutantFunction<R, R (*)(X1, X2, X3, A1, A2, A3, A4, A5, A6), 3178 new MutantFunction<R, R (*)(X1, X2, X3, A1, A2, A3, A4, A5, A6),
3066 Tuple<P1, P2, P3>, Tuple<A1, A2, A3, A4, A5, A6>> 3179 base::Tuple<P1, P2, P3>, base::Tuple<A1, A2, A3, A4,
3067 (function, MakeTuple(p1, p2, p3)); 3180 A5, A6>>
3068 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t); 3181 (function, base::MakeTuple(p1, p2, p3));
3182 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
3069 } 3183 }
3070 3184
3071 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 3185 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3072 template <typename R, typename T, typename U, typename P1, typename P2, 3186 template <typename R, typename T, typename U, typename P1, typename P2,
3073 typename P3, typename A1, typename A2, typename A3, typename A4, 3187 typename P3, typename A1, typename A2, typename A3, typename A4,
3074 typename A5, typename A6, typename X1, typename X2, typename X3> 3188 typename A5, typename A6, typename X1, typename X2, typename X3>
3075 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>> 3189 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
3076 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, A1, A2, A3, A4, A5, A6), 3190 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, A1, A2, A3, A4, A5, A6),
3077 const P1& p1, const P2& p2, const P3& p3) { 3191 const P1& p1, const P2& p2, const P3& p3) {
3078 MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t = 3192 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
3079 new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, A1, A2, A3, A4, A5, A6 ), 3193 new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, A1, A2, A3, A4, A5, A6 ),
3080 Tuple<P1, P2, P3>, Tuple<A1, A2, A3, A4, A5, A6>> 3194 base::Tuple<P1, P2, P3>, base::Tuple<A1, A2, A3, A4, A5, A6>>
3081 (obj, method, MakeTuple(p1, p2, p3)); 3195 (obj, method, base::MakeTuple(p1, p2, p3));
3082 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t); 3196 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
3083 } 3197 }
3084 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 3198 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3085 3199
3086 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 3200 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
3087 template <typename R, typename T, typename U, typename P1, typename P2, 3201 template <typename R, typename T, typename U, typename P1, typename P2,
3088 typename P3, typename A1, typename A2, typename A3, typename A4, 3202 typename P3, typename A1, typename A2, typename A3, typename A4,
3089 typename A5, typename A6, typename X1, typename X2, typename X3> 3203 typename A5, typename A6, typename X1, typename X2, typename X3>
3090 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>> 3204 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
3091 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, A1, A2, A3, A4, A5, 3205 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, A1, A2, A3, A4, A5,
3092 A6), const P1& p1, const P2& p2, const P3& p3) { 3206 A6), const P1& p1, const P2& p2, const P3& p3) {
3093 MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t = 3207 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
3094 new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, A1, A2, A3, A4, A5, A6), 3208 new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, A1, A2, A3, A4, A5, A6),
3095 Tuple<P1, P2, P3>, Tuple<A1, A2, A3, A4, A5, A6>> 3209 base::Tuple<P1, P2, P3>, base::Tuple<A1, A2, A3, A4, A5, A6>>
3096 (obj, method, MakeTuple(p1, p2, p3)); 3210 (obj, method, base::MakeTuple(p1, p2, p3));
3097 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t); 3211 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
3098 } 3212 }
3099 3213
3100 template <typename R, typename P1, typename P2, typename P3, typename A1, 3214 template <typename R, typename P1, typename P2, typename P3, typename A1,
3101 typename A2, typename A3, typename A4, typename A5, typename A6, 3215 typename A2, typename A3, typename A4, typename A5, typename A6,
3102 typename X1, typename X2, typename X3> 3216 typename X1, typename X2, typename X3>
3103 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>> 3217 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
3104 CreateFunctor(R (__stdcall *function)(X1, X2, X3, A1, A2, A3, A4, A5, A6), 3218 CreateFunctor(R (__stdcall *function)(X1, X2, X3, A1, A2, A3, A4, A5, A6),
3105 const P1& p1, const P2& p2, const P3& p3) { 3219 const P1& p1, const P2& p2, const P3& p3) {
3106 MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t = 3220 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
3107 new MutantFunction<R, R (__stdcall *)(X1, X2, X3, A1, A2, A3, A4, A5, A6), 3221 new MutantFunction<R, R (__stdcall *)(X1, X2, X3, A1, A2, A3, A4, A5, A6),
3108 Tuple<P1, P2, P3>, Tuple<A1, A2, A3, A4, A5, A6>> 3222 base::Tuple<P1, P2, P3>, base::Tuple<A1, A2, A3, A4,
3109 (function, MakeTuple(p1, p2, p3)); 3223 A5, A6>>
3110 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t); 3224 (function, base::MakeTuple(p1, p2, p3));
3225 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
3111 } 3226 }
3112 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 3227 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3113 template <typename R, typename T, typename U, typename P1, typename P2, 3228 template <typename R, typename T, typename U, typename P1, typename P2,
3114 typename P3, typename A1, typename A2, typename A3, typename A4, 3229 typename P3, typename A1, typename A2, typename A3, typename A4,
3115 typename A5, typename A6, typename X1, typename X2, typename X3> 3230 typename A5, typename A6, typename X1, typename X2, typename X3>
3116 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>> 3231 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
3117 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, A1, A2, A3, A4, A5, 3232 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, A1, A2, A3, A4, A5,
3118 A6), const P1& p1, const P2& p2, const P3& p3) { 3233 A6), const P1& p1, const P2& p2, const P3& p3) {
3119 MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t = 3234 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
3120 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, A1, A2, A3, A4, A5, A6), 3235 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, A1, A2, A3, A4, A5, A6),
3121 Tuple<P1, P2, P3>, Tuple<A1, A2, A3, A4, A5, A6>> 3236 base::Tuple<P1, P2, P3>, base::Tuple<A1, A2, A3, A4, A5, A6>>
3122 (obj, method, MakeTuple(p1, p2, p3)); 3237 (obj, method, base::MakeTuple(p1, p2, p3));
3123 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t); 3238 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
3124 } 3239 }
3125 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 3240 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3126 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 3241 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
3127 3242
3128 // 4 - 0 3243 // 4 - 0
3129 template <typename R, typename T, typename U, typename P1, typename P2, 3244 template <typename R, typename T, typename U, typename P1, typename P2,
3130 typename P3, typename P4, typename X1, typename X2, typename X3, 3245 typename P3, typename P4, typename X1, typename X2, typename X3,
3131 typename X4> 3246 typename X4>
3132 inline MutantFunctor<R, Tuple<>> 3247 inline MutantFunctor<R, base::Tuple<>>
3133 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4), const P1& p1, 3248 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4), const P1& p1,
3134 const P2& p2, const P3& p3, const P4& p4) { 3249 const P2& p2, const P3& p3, const P4& p4) {
3135 MutantRunner<R, Tuple<>>* t = 3250 MutantRunner<R, base::Tuple<>>* t =
3136 new Mutant<R, T, R (U::*)(X1, X2, X3, X4), 3251 new Mutant<R, T, R (U::*)(X1, X2, X3, X4),
3137 Tuple<P1, P2, P3, P4>, Tuple<>> 3252 base::Tuple<P1, P2, P3, P4>, base::Tuple<>>
3138 (obj, method, MakeTuple(p1, p2, p3, p4)); 3253 (obj, method, base::MakeTuple(p1, p2, p3, p4));
3139 return MutantFunctor<R, Tuple<>>(t); 3254 return MutantFunctor<R, base::Tuple<>>(t);
3140 } 3255 }
3141 3256
3142 template <typename R, typename P1, typename P2, typename P3, typename P4, 3257 template <typename R, typename P1, typename P2, typename P3, typename P4,
3143 typename X1, typename X2, typename X3, typename X4> 3258 typename X1, typename X2, typename X3, typename X4>
3144 inline MutantFunctor<R, Tuple<>> 3259 inline MutantFunctor<R, base::Tuple<>>
3145 CreateFunctor(R (*function)(X1, X2, X3, X4), const P1& p1, const P2& p2, 3260 CreateFunctor(R (*function)(X1, X2, X3, X4), const P1& p1, const P2& p2,
3146 const P3& p3, const P4& p4) { 3261 const P3& p3, const P4& p4) {
3147 MutantRunner<R, Tuple<>>* t = 3262 MutantRunner<R, base::Tuple<>>* t =
3148 new MutantFunction<R, R (*)(X1, X2, X3, X4), 3263 new MutantFunction<R, R (*)(X1, X2, X3, X4),
3149 Tuple<P1, P2, P3, P4>, Tuple<>> 3264 base::Tuple<P1, P2, P3, P4>, base::Tuple<>>
3150 (function, MakeTuple(p1, p2, p3, p4)); 3265 (function, base::MakeTuple(p1, p2, p3, p4));
3151 return MutantFunctor<R, Tuple<>>(t); 3266 return MutantFunctor<R, base::Tuple<>>(t);
3152 } 3267 }
3153 3268
3154 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 3269 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3155 template <typename R, typename T, typename U, typename P1, typename P2, 3270 template <typename R, typename T, typename U, typename P1, typename P2,
3156 typename P3, typename P4, typename X1, typename X2, typename X3, 3271 typename P3, typename P4, typename X1, typename X2, typename X3,
3157 typename X4> 3272 typename X4>
3158 inline MutantFunctor<R, Tuple<>> 3273 inline MutantFunctor<R, base::Tuple<>>
3159 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4), const P1& p1, 3274 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4), const P1& p1,
3160 const P2& p2, const P3& p3, const P4& p4) { 3275 const P2& p2, const P3& p3, const P4& p4) {
3161 MutantRunner<R, Tuple<>>* t = 3276 MutantRunner<R, base::Tuple<>>* t =
3162 new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4), 3277 new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4),
3163 Tuple<P1, P2, P3, P4>, Tuple<>> 3278 base::Tuple<P1, P2, P3, P4>, base::Tuple<>>
3164 (obj, method, MakeTuple(p1, p2, p3, p4)); 3279 (obj, method, base::MakeTuple(p1, p2, p3, p4));
3165 return MutantFunctor<R, Tuple<>>(t); 3280 return MutantFunctor<R, base::Tuple<>>(t);
3166 } 3281 }
3167 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 3282 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3168 3283
3169 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 3284 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
3170 template <typename R, typename T, typename U, typename P1, typename P2, 3285 template <typename R, typename T, typename U, typename P1, typename P2,
3171 typename P3, typename P4, typename X1, typename X2, typename X3, 3286 typename P3, typename P4, typename X1, typename X2, typename X3,
3172 typename X4> 3287 typename X4>
3173 inline MutantFunctor<R, Tuple<>> 3288 inline MutantFunctor<R, base::Tuple<>>
3174 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4), const P1& p1, 3289 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4), const P1& p1,
3175 const P2& p2, const P3& p3, const P4& p4) { 3290 const P2& p2, const P3& p3, const P4& p4) {
3176 MutantRunner<R, Tuple<>>* t = 3291 MutantRunner<R, base::Tuple<>>* t =
3177 new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4), 3292 new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4),
3178 Tuple<P1, P2, P3, P4>, Tuple<>> 3293 base::Tuple<P1, P2, P3, P4>, base::Tuple<>>
3179 (obj, method, MakeTuple(p1, p2, p3, p4)); 3294 (obj, method, base::MakeTuple(p1, p2, p3, p4));
3180 return MutantFunctor<R, Tuple<>>(t); 3295 return MutantFunctor<R, base::Tuple<>>(t);
3181 } 3296 }
3182 3297
3183 template <typename R, typename P1, typename P2, typename P3, typename P4, 3298 template <typename R, typename P1, typename P2, typename P3, typename P4,
3184 typename X1, typename X2, typename X3, typename X4> 3299 typename X1, typename X2, typename X3, typename X4>
3185 inline MutantFunctor<R, Tuple<>> 3300 inline MutantFunctor<R, base::Tuple<>>
3186 CreateFunctor(R (__stdcall *function)(X1, X2, X3, X4), const P1& p1, 3301 CreateFunctor(R (__stdcall *function)(X1, X2, X3, X4), const P1& p1,
3187 const P2& p2, const P3& p3, const P4& p4) { 3302 const P2& p2, const P3& p3, const P4& p4) {
3188 MutantRunner<R, Tuple<>>* t = 3303 MutantRunner<R, base::Tuple<>>* t =
3189 new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4), 3304 new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4),
3190 Tuple<P1, P2, P3, P4>, Tuple<>> 3305 base::Tuple<P1, P2, P3, P4>, base::Tuple<>>
3191 (function, MakeTuple(p1, p2, p3, p4)); 3306 (function, base::MakeTuple(p1, p2, p3, p4));
3192 return MutantFunctor<R, Tuple<>>(t); 3307 return MutantFunctor<R, base::Tuple<>>(t);
3193 } 3308 }
3194 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 3309 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3195 template <typename R, typename T, typename U, typename P1, typename P2, 3310 template <typename R, typename T, typename U, typename P1, typename P2,
3196 typename P3, typename P4, typename X1, typename X2, typename X3, 3311 typename P3, typename P4, typename X1, typename X2, typename X3,
3197 typename X4> 3312 typename X4>
3198 inline MutantFunctor<R, Tuple<>> 3313 inline MutantFunctor<R, base::Tuple<>>
3199 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4), const P1& p1, 3314 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4), const P1& p1,
3200 const P2& p2, const P3& p3, const P4& p4) { 3315 const P2& p2, const P3& p3, const P4& p4) {
3201 MutantRunner<R, Tuple<>>* t = 3316 MutantRunner<R, base::Tuple<>>* t =
3202 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4), 3317 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4),
3203 Tuple<P1, P2, P3, P4>, Tuple<>> 3318 base::Tuple<P1, P2, P3, P4>, base::Tuple<>>
3204 (obj, method, MakeTuple(p1, p2, p3, p4)); 3319 (obj, method, base::MakeTuple(p1, p2, p3, p4));
3205 return MutantFunctor<R, Tuple<>>(t); 3320 return MutantFunctor<R, base::Tuple<>>(t);
3206 } 3321 }
3207 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 3322 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3208 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 3323 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
3209 3324
3210 // 4 - 1 3325 // 4 - 1
3211 template <typename R, typename T, typename U, typename P1, typename P2, 3326 template <typename R, typename T, typename U, typename P1, typename P2,
3212 typename P3, typename P4, typename A1, typename X1, typename X2, 3327 typename P3, typename P4, typename A1, typename X1, typename X2,
3213 typename X3, typename X4> 3328 typename X3, typename X4>
3214 inline MutantFunctor<R, Tuple<A1>> 3329 inline MutantFunctor<R, base::Tuple<A1>>
3215 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, A1), const P1& p1, 3330 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, A1), const P1& p1,
3216 const P2& p2, const P3& p3, const P4& p4) { 3331 const P2& p2, const P3& p3, const P4& p4) {
3217 MutantRunner<R, Tuple<A1>>* t = 3332 MutantRunner<R, base::Tuple<A1>>* t =
3218 new Mutant<R, T, R (U::*)(X1, X2, X3, X4, A1), 3333 new Mutant<R, T, R (U::*)(X1, X2, X3, X4, A1),
3219 Tuple<P1, P2, P3, P4>, Tuple<A1>> 3334 base::Tuple<P1, P2, P3, P4>, base::Tuple<A1>>
3220 (obj, method, MakeTuple(p1, p2, p3, p4)); 3335 (obj, method, base::MakeTuple(p1, p2, p3, p4));
3221 return MutantFunctor<R, Tuple<A1>>(t); 3336 return MutantFunctor<R, base::Tuple<A1>>(t);
3222 } 3337 }
3223 3338
3224 template <typename R, typename P1, typename P2, typename P3, typename P4, 3339 template <typename R, typename P1, typename P2, typename P3, typename P4,
3225 typename A1, typename X1, typename X2, typename X3, typename X4> 3340 typename A1, typename X1, typename X2, typename X3, typename X4>
3226 inline MutantFunctor<R, Tuple<A1>> 3341 inline MutantFunctor<R, base::Tuple<A1>>
3227 CreateFunctor(R (*function)(X1, X2, X3, X4, A1), const P1& p1, const P2& p2, 3342 CreateFunctor(R (*function)(X1, X2, X3, X4, A1), const P1& p1, const P2& p2,
3228 const P3& p3, const P4& p4) { 3343 const P3& p3, const P4& p4) {
3229 MutantRunner<R, Tuple<A1>>* t = 3344 MutantRunner<R, base::Tuple<A1>>* t =
3230 new MutantFunction<R, R (*)(X1, X2, X3, X4, A1), 3345 new MutantFunction<R, R (*)(X1, X2, X3, X4, A1),
3231 Tuple<P1, P2, P3, P4>, Tuple<A1>> 3346 base::Tuple<P1, P2, P3, P4>, base::Tuple<A1>>
3232 (function, MakeTuple(p1, p2, p3, p4)); 3347 (function, base::MakeTuple(p1, p2, p3, p4));
3233 return MutantFunctor<R, Tuple<A1>>(t); 3348 return MutantFunctor<R, base::Tuple<A1>>(t);
3234 } 3349 }
3235 3350
3236 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 3351 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3237 template <typename R, typename T, typename U, typename P1, typename P2, 3352 template <typename R, typename T, typename U, typename P1, typename P2,
3238 typename P3, typename P4, typename A1, typename X1, typename X2, 3353 typename P3, typename P4, typename A1, typename X1, typename X2,
3239 typename X3, typename X4> 3354 typename X3, typename X4>
3240 inline MutantFunctor<R, Tuple<A1>> 3355 inline MutantFunctor<R, base::Tuple<A1>>
3241 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, A1), const P1& p1, 3356 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, A1), const P1& p1,
3242 const P2& p2, const P3& p3, const P4& p4) { 3357 const P2& p2, const P3& p3, const P4& p4) {
3243 MutantRunner<R, Tuple<A1>>* t = 3358 MutantRunner<R, base::Tuple<A1>>* t =
3244 new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, A1), 3359 new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, A1),
3245 Tuple<P1, P2, P3, P4>, Tuple<A1>> 3360 base::Tuple<P1, P2, P3, P4>, base::Tuple<A1>>
3246 (obj, method, MakeTuple(p1, p2, p3, p4)); 3361 (obj, method, base::MakeTuple(p1, p2, p3, p4));
3247 return MutantFunctor<R, Tuple<A1>>(t); 3362 return MutantFunctor<R, base::Tuple<A1>>(t);
3248 } 3363 }
3249 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 3364 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3250 3365
3251 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 3366 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
3252 template <typename R, typename T, typename U, typename P1, typename P2, 3367 template <typename R, typename T, typename U, typename P1, typename P2,
3253 typename P3, typename P4, typename A1, typename X1, typename X2, 3368 typename P3, typename P4, typename A1, typename X1, typename X2,
3254 typename X3, typename X4> 3369 typename X3, typename X4>
3255 inline MutantFunctor<R, Tuple<A1>> 3370 inline MutantFunctor<R, base::Tuple<A1>>
3256 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, A1), 3371 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, A1),
3257 const P1& p1, const P2& p2, const P3& p3, const P4& p4) { 3372 const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
3258 MutantRunner<R, Tuple<A1>>* t = 3373 MutantRunner<R, base::Tuple<A1>>* t =
3259 new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, A1), 3374 new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, A1),
3260 Tuple<P1, P2, P3, P4>, Tuple<A1>> 3375 base::Tuple<P1, P2, P3, P4>, base::Tuple<A1>>
3261 (obj, method, MakeTuple(p1, p2, p3, p4)); 3376 (obj, method, base::MakeTuple(p1, p2, p3, p4));
3262 return MutantFunctor<R, Tuple<A1>>(t); 3377 return MutantFunctor<R, base::Tuple<A1>>(t);
3263 } 3378 }
3264 3379
3265 template <typename R, typename P1, typename P2, typename P3, typename P4, 3380 template <typename R, typename P1, typename P2, typename P3, typename P4,
3266 typename A1, typename X1, typename X2, typename X3, typename X4> 3381 typename A1, typename X1, typename X2, typename X3, typename X4>
3267 inline MutantFunctor<R, Tuple<A1>> 3382 inline MutantFunctor<R, base::Tuple<A1>>
3268 CreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, A1), const P1& p1, 3383 CreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, A1), const P1& p1,
3269 const P2& p2, const P3& p3, const P4& p4) { 3384 const P2& p2, const P3& p3, const P4& p4) {
3270 MutantRunner<R, Tuple<A1>>* t = 3385 MutantRunner<R, base::Tuple<A1>>* t =
3271 new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, A1), 3386 new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, A1),
3272 Tuple<P1, P2, P3, P4>, Tuple<A1>> 3387 base::Tuple<P1, P2, P3, P4>, base::Tuple<A1>>
3273 (function, MakeTuple(p1, p2, p3, p4)); 3388 (function, base::MakeTuple(p1, p2, p3, p4));
3274 return MutantFunctor<R, Tuple<A1>>(t); 3389 return MutantFunctor<R, base::Tuple<A1>>(t);
3275 } 3390 }
3276 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 3391 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3277 template <typename R, typename T, typename U, typename P1, typename P2, 3392 template <typename R, typename T, typename U, typename P1, typename P2,
3278 typename P3, typename P4, typename A1, typename X1, typename X2, 3393 typename P3, typename P4, typename A1, typename X1, typename X2,
3279 typename X3, typename X4> 3394 typename X3, typename X4>
3280 inline MutantFunctor<R, Tuple<A1>> 3395 inline MutantFunctor<R, base::Tuple<A1>>
3281 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, A1), 3396 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, A1),
3282 const P1& p1, const P2& p2, const P3& p3, const P4& p4) { 3397 const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
3283 MutantRunner<R, Tuple<A1>>* t = 3398 MutantRunner<R, base::Tuple<A1>>* t =
3284 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, A1), 3399 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, A1),
3285 Tuple<P1, P2, P3, P4>, Tuple<A1>> 3400 base::Tuple<P1, P2, P3, P4>, base::Tuple<A1>>
3286 (obj, method, MakeTuple(p1, p2, p3, p4)); 3401 (obj, method, base::MakeTuple(p1, p2, p3, p4));
3287 return MutantFunctor<R, Tuple<A1>>(t); 3402 return MutantFunctor<R, base::Tuple<A1>>(t);
3288 } 3403 }
3289 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 3404 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3290 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 3405 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
3291 3406
3292 // 4 - 2 3407 // 4 - 2
3293 template <typename R, typename T, typename U, typename P1, typename P2, 3408 template <typename R, typename T, typename U, typename P1, typename P2,
3294 typename P3, typename P4, typename A1, typename A2, typename X1, 3409 typename P3, typename P4, typename A1, typename A2, typename X1,
3295 typename X2, typename X3, typename X4> 3410 typename X2, typename X3, typename X4>
3296 inline MutantFunctor<R, Tuple<A1, A2>> 3411 inline MutantFunctor<R, base::Tuple<A1, A2>>
3297 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, A1, A2), const P1& p1, 3412 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, A1, A2), const P1& p1,
3298 const P2& p2, const P3& p3, const P4& p4) { 3413 const P2& p2, const P3& p3, const P4& p4) {
3299 MutantRunner<R, Tuple<A1, A2>>* t = 3414 MutantRunner<R, base::Tuple<A1, A2>>* t =
3300 new Mutant<R, T, R (U::*)(X1, X2, X3, X4, A1, A2), 3415 new Mutant<R, T, R (U::*)(X1, X2, X3, X4, A1, A2),
3301 Tuple<P1, P2, P3, P4>, Tuple<A1, A2>> 3416 base::Tuple<P1, P2, P3, P4>, base::Tuple<A1, A2>>
3302 (obj, method, MakeTuple(p1, p2, p3, p4)); 3417 (obj, method, base::MakeTuple(p1, p2, p3, p4));
3303 return MutantFunctor<R, Tuple<A1, A2>>(t); 3418 return MutantFunctor<R, base::Tuple<A1, A2>>(t);
3304 } 3419 }
3305 3420
3306 template <typename R, typename P1, typename P2, typename P3, typename P4, 3421 template <typename R, typename P1, typename P2, typename P3, typename P4,
3307 typename A1, typename A2, typename X1, typename X2, typename X3, 3422 typename A1, typename A2, typename X1, typename X2, typename X3,
3308 typename X4> 3423 typename X4>
3309 inline MutantFunctor<R, Tuple<A1, A2>> 3424 inline MutantFunctor<R, base::Tuple<A1, A2>>
3310 CreateFunctor(R (*function)(X1, X2, X3, X4, A1, A2), const P1& p1, const P2& p2, 3425 CreateFunctor(R (*function)(X1, X2, X3, X4, A1, A2), const P1& p1, const P2& p2,
3311 const P3& p3, const P4& p4) { 3426 const P3& p3, const P4& p4) {
3312 MutantRunner<R, Tuple<A1, A2>>* t = 3427 MutantRunner<R, base::Tuple<A1, A2>>* t =
3313 new MutantFunction<R, R (*)(X1, X2, X3, X4, A1, A2), 3428 new MutantFunction<R, R (*)(X1, X2, X3, X4, A1, A2),
3314 Tuple<P1, P2, P3, P4>, Tuple<A1, A2>> 3429 base::Tuple<P1, P2, P3, P4>, base::Tuple<A1, A2>>
3315 (function, MakeTuple(p1, p2, p3, p4)); 3430 (function, base::MakeTuple(p1, p2, p3, p4));
3316 return MutantFunctor<R, Tuple<A1, A2>>(t); 3431 return MutantFunctor<R, base::Tuple<A1, A2>>(t);
3317 } 3432 }
3318 3433
3319 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 3434 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3320 template <typename R, typename T, typename U, typename P1, typename P2, 3435 template <typename R, typename T, typename U, typename P1, typename P2,
3321 typename P3, typename P4, typename A1, typename A2, typename X1, 3436 typename P3, typename P4, typename A1, typename A2, typename X1,
3322 typename X2, typename X3, typename X4> 3437 typename X2, typename X3, typename X4>
3323 inline MutantFunctor<R, Tuple<A1, A2>> 3438 inline MutantFunctor<R, base::Tuple<A1, A2>>
3324 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, A1, A2), const P1& p1, 3439 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, A1, A2), const P1& p1,
3325 const P2& p2, const P3& p3, const P4& p4) { 3440 const P2& p2, const P3& p3, const P4& p4) {
3326 MutantRunner<R, Tuple<A1, A2>>* t = 3441 MutantRunner<R, base::Tuple<A1, A2>>* t =
3327 new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, A1, A2), 3442 new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, A1, A2),
3328 Tuple<P1, P2, P3, P4>, Tuple<A1, A2>> 3443 base::Tuple<P1, P2, P3, P4>, base::Tuple<A1, A2>>
3329 (obj, method, MakeTuple(p1, p2, p3, p4)); 3444 (obj, method, base::MakeTuple(p1, p2, p3, p4));
3330 return MutantFunctor<R, Tuple<A1, A2>>(t); 3445 return MutantFunctor<R, base::Tuple<A1, A2>>(t);
3331 } 3446 }
3332 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 3447 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3333 3448
3334 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 3449 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
3335 template <typename R, typename T, typename U, typename P1, typename P2, 3450 template <typename R, typename T, typename U, typename P1, typename P2,
3336 typename P3, typename P4, typename A1, typename A2, typename X1, 3451 typename P3, typename P4, typename A1, typename A2, typename X1,
3337 typename X2, typename X3, typename X4> 3452 typename X2, typename X3, typename X4>
3338 inline MutantFunctor<R, Tuple<A1, A2>> 3453 inline MutantFunctor<R, base::Tuple<A1, A2>>
3339 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, A1, A2), 3454 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, A1, A2),
3340 const P1& p1, const P2& p2, const P3& p3, const P4& p4) { 3455 const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
3341 MutantRunner<R, Tuple<A1, A2>>* t = 3456 MutantRunner<R, base::Tuple<A1, A2>>* t =
3342 new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, A1, A2), 3457 new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, A1, A2),
3343 Tuple<P1, P2, P3, P4>, Tuple<A1, A2>> 3458 base::Tuple<P1, P2, P3, P4>, base::Tuple<A1, A2>>
3344 (obj, method, MakeTuple(p1, p2, p3, p4)); 3459 (obj, method, base::MakeTuple(p1, p2, p3, p4));
3345 return MutantFunctor<R, Tuple<A1, A2>>(t); 3460 return MutantFunctor<R, base::Tuple<A1, A2>>(t);
3346 } 3461 }
3347 3462
3348 template <typename R, typename P1, typename P2, typename P3, typename P4, 3463 template <typename R, typename P1, typename P2, typename P3, typename P4,
3349 typename A1, typename A2, typename X1, typename X2, typename X3, 3464 typename A1, typename A2, typename X1, typename X2, typename X3,
3350 typename X4> 3465 typename X4>
3351 inline MutantFunctor<R, Tuple<A1, A2>> 3466 inline MutantFunctor<R, base::Tuple<A1, A2>>
3352 CreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, A1, A2), const P1& p1, 3467 CreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, A1, A2), const P1& p1,
3353 const P2& p2, const P3& p3, const P4& p4) { 3468 const P2& p2, const P3& p3, const P4& p4) {
3354 MutantRunner<R, Tuple<A1, A2>>* t = 3469 MutantRunner<R, base::Tuple<A1, A2>>* t =
3355 new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, A1, A2), 3470 new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, A1, A2),
3356 Tuple<P1, P2, P3, P4>, Tuple<A1, A2>> 3471 base::Tuple<P1, P2, P3, P4>, base::Tuple<A1, A2>>
3357 (function, MakeTuple(p1, p2, p3, p4)); 3472 (function, base::MakeTuple(p1, p2, p3, p4));
3358 return MutantFunctor<R, Tuple<A1, A2>>(t); 3473 return MutantFunctor<R, base::Tuple<A1, A2>>(t);
3359 } 3474 }
3360 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 3475 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3361 template <typename R, typename T, typename U, typename P1, typename P2, 3476 template <typename R, typename T, typename U, typename P1, typename P2,
3362 typename P3, typename P4, typename A1, typename A2, typename X1, 3477 typename P3, typename P4, typename A1, typename A2, typename X1,
3363 typename X2, typename X3, typename X4> 3478 typename X2, typename X3, typename X4>
3364 inline MutantFunctor<R, Tuple<A1, A2>> 3479 inline MutantFunctor<R, base::Tuple<A1, A2>>
3365 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, A1, A2), 3480 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, A1, A2),
3366 const P1& p1, const P2& p2, const P3& p3, const P4& p4) { 3481 const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
3367 MutantRunner<R, Tuple<A1, A2>>* t = 3482 MutantRunner<R, base::Tuple<A1, A2>>* t =
3368 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, A1, A2), 3483 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, A1, A2),
3369 Tuple<P1, P2, P3, P4>, Tuple<A1, A2>> 3484 base::Tuple<P1, P2, P3, P4>, base::Tuple<A1, A2>>
3370 (obj, method, MakeTuple(p1, p2, p3, p4)); 3485 (obj, method, base::MakeTuple(p1, p2, p3, p4));
3371 return MutantFunctor<R, Tuple<A1, A2>>(t); 3486 return MutantFunctor<R, base::Tuple<A1, A2>>(t);
3372 } 3487 }
3373 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 3488 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3374 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 3489 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
3375 3490
3376 // 4 - 3 3491 // 4 - 3
3377 template <typename R, typename T, typename U, typename P1, typename P2, 3492 template <typename R, typename T, typename U, typename P1, typename P2,
3378 typename P3, typename P4, typename A1, typename A2, typename A3, 3493 typename P3, typename P4, typename A1, typename A2, typename A3,
3379 typename X1, typename X2, typename X3, typename X4> 3494 typename X1, typename X2, typename X3, typename X4>
3380 inline MutantFunctor<R, Tuple<A1, A2, A3>> 3495 inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
3381 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, A1, A2, A3), const P1& p1, 3496 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, A1, A2, A3), const P1& p1,
3382 const P2& p2, const P3& p3, const P4& p4) { 3497 const P2& p2, const P3& p3, const P4& p4) {
3383 MutantRunner<R, Tuple<A1, A2, A3>>* t = 3498 MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
3384 new Mutant<R, T, R (U::*)(X1, X2, X3, X4, A1, A2, A3), 3499 new Mutant<R, T, R (U::*)(X1, X2, X3, X4, A1, A2, A3),
3385 Tuple<P1, P2, P3, P4>, Tuple<A1, A2, A3>> 3500 base::Tuple<P1, P2, P3, P4>, base::Tuple<A1, A2, A3>>
3386 (obj, method, MakeTuple(p1, p2, p3, p4)); 3501 (obj, method, base::MakeTuple(p1, p2, p3, p4));
3387 return MutantFunctor<R, Tuple<A1, A2, A3>>(t); 3502 return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
3388 } 3503 }
3389 3504
3390 template <typename R, typename P1, typename P2, typename P3, typename P4, 3505 template <typename R, typename P1, typename P2, typename P3, typename P4,
3391 typename A1, typename A2, typename A3, typename X1, typename X2, 3506 typename A1, typename A2, typename A3, typename X1, typename X2,
3392 typename X3, typename X4> 3507 typename X3, typename X4>
3393 inline MutantFunctor<R, Tuple<A1, A2, A3>> 3508 inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
3394 CreateFunctor(R (*function)(X1, X2, X3, X4, A1, A2, A3), const P1& p1, 3509 CreateFunctor(R (*function)(X1, X2, X3, X4, A1, A2, A3), const P1& p1,
3395 const P2& p2, const P3& p3, const P4& p4) { 3510 const P2& p2, const P3& p3, const P4& p4) {
3396 MutantRunner<R, Tuple<A1, A2, A3>>* t = 3511 MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
3397 new MutantFunction<R, R (*)(X1, X2, X3, X4, A1, A2, A3), 3512 new MutantFunction<R, R (*)(X1, X2, X3, X4, A1, A2, A3),
3398 Tuple<P1, P2, P3, P4>, Tuple<A1, A2, A3>> 3513 base::Tuple<P1, P2, P3, P4>, base::Tuple<A1, A2, A3>>
3399 (function, MakeTuple(p1, p2, p3, p4)); 3514 (function, base::MakeTuple(p1, p2, p3, p4));
3400 return MutantFunctor<R, Tuple<A1, A2, A3>>(t); 3515 return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
3401 } 3516 }
3402 3517
3403 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 3518 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3404 template <typename R, typename T, typename U, typename P1, typename P2, 3519 template <typename R, typename T, typename U, typename P1, typename P2,
3405 typename P3, typename P4, typename A1, typename A2, typename A3, 3520 typename P3, typename P4, typename A1, typename A2, typename A3,
3406 typename X1, typename X2, typename X3, typename X4> 3521 typename X1, typename X2, typename X3, typename X4>
3407 inline MutantFunctor<R, Tuple<A1, A2, A3>> 3522 inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
3408 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, A1, A2, A3), const P1& p1, 3523 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, A1, A2, A3), const P1& p1,
3409 const P2& p2, const P3& p3, const P4& p4) { 3524 const P2& p2, const P3& p3, const P4& p4) {
3410 MutantRunner<R, Tuple<A1, A2, A3>>* t = 3525 MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
3411 new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, A1, A2, A3), 3526 new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, A1, A2, A3),
3412 Tuple<P1, P2, P3, P4>, Tuple<A1, A2, A3>> 3527 base::Tuple<P1, P2, P3, P4>, base::Tuple<A1, A2, A3>>
3413 (obj, method, MakeTuple(p1, p2, p3, p4)); 3528 (obj, method, base::MakeTuple(p1, p2, p3, p4));
3414 return MutantFunctor<R, Tuple<A1, A2, A3>>(t); 3529 return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
3415 } 3530 }
3416 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 3531 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3417 3532
3418 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 3533 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
3419 template <typename R, typename T, typename U, typename P1, typename P2, 3534 template <typename R, typename T, typename U, typename P1, typename P2,
3420 typename P3, typename P4, typename A1, typename A2, typename A3, 3535 typename P3, typename P4, typename A1, typename A2, typename A3,
3421 typename X1, typename X2, typename X3, typename X4> 3536 typename X1, typename X2, typename X3, typename X4>
3422 inline MutantFunctor<R, Tuple<A1, A2, A3>> 3537 inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
3423 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, A1, A2, A3), 3538 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, A1, A2, A3),
3424 const P1& p1, const P2& p2, const P3& p3, const P4& p4) { 3539 const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
3425 MutantRunner<R, Tuple<A1, A2, A3>>* t = 3540 MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
3426 new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, A1, A2, A3), 3541 new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, A1, A2, A3),
3427 Tuple<P1, P2, P3, P4>, Tuple<A1, A2, A3>> 3542 base::Tuple<P1, P2, P3, P4>, base::Tuple<A1, A2, A3>>
3428 (obj, method, MakeTuple(p1, p2, p3, p4)); 3543 (obj, method, base::MakeTuple(p1, p2, p3, p4));
3429 return MutantFunctor<R, Tuple<A1, A2, A3>>(t); 3544 return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
3430 } 3545 }
3431 3546
3432 template <typename R, typename P1, typename P2, typename P3, typename P4, 3547 template <typename R, typename P1, typename P2, typename P3, typename P4,
3433 typename A1, typename A2, typename A3, typename X1, typename X2, 3548 typename A1, typename A2, typename A3, typename X1, typename X2,
3434 typename X3, typename X4> 3549 typename X3, typename X4>
3435 inline MutantFunctor<R, Tuple<A1, A2, A3>> 3550 inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
3436 CreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, A1, A2, A3), const P1& p1, 3551 CreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, A1, A2, A3), const P1& p1,
3437 const P2& p2, const P3& p3, const P4& p4) { 3552 const P2& p2, const P3& p3, const P4& p4) {
3438 MutantRunner<R, Tuple<A1, A2, A3>>* t = 3553 MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
3439 new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, A1, A2, A3), 3554 new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, A1, A2, A3),
3440 Tuple<P1, P2, P3, P4>, Tuple<A1, A2, A3>> 3555 base::Tuple<P1, P2, P3, P4>, base::Tuple<A1, A2, A3>>
3441 (function, MakeTuple(p1, p2, p3, p4)); 3556 (function, base::MakeTuple(p1, p2, p3, p4));
3442 return MutantFunctor<R, Tuple<A1, A2, A3>>(t); 3557 return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
3443 } 3558 }
3444 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 3559 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3445 template <typename R, typename T, typename U, typename P1, typename P2, 3560 template <typename R, typename T, typename U, typename P1, typename P2,
3446 typename P3, typename P4, typename A1, typename A2, typename A3, 3561 typename P3, typename P4, typename A1, typename A2, typename A3,
3447 typename X1, typename X2, typename X3, typename X4> 3562 typename X1, typename X2, typename X3, typename X4>
3448 inline MutantFunctor<R, Tuple<A1, A2, A3>> 3563 inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
3449 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, A1, A2, A3), 3564 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, A1, A2, A3),
3450 const P1& p1, const P2& p2, const P3& p3, const P4& p4) { 3565 const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
3451 MutantRunner<R, Tuple<A1, A2, A3>>* t = 3566 MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
3452 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, A1, A2, A3), 3567 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, A1, A2, A3),
3453 Tuple<P1, P2, P3, P4>, Tuple<A1, A2, A3>> 3568 base::Tuple<P1, P2, P3, P4>, base::Tuple<A1, A2, A3>>
3454 (obj, method, MakeTuple(p1, p2, p3, p4)); 3569 (obj, method, base::MakeTuple(p1, p2, p3, p4));
3455 return MutantFunctor<R, Tuple<A1, A2, A3>>(t); 3570 return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
3456 } 3571 }
3457 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 3572 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3458 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 3573 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
3459 3574
3460 // 4 - 4 3575 // 4 - 4
3461 template <typename R, typename T, typename U, typename P1, typename P2, 3576 template <typename R, typename T, typename U, typename P1, typename P2,
3462 typename P3, typename P4, typename A1, typename A2, typename A3, 3577 typename P3, typename P4, typename A1, typename A2, typename A3,
3463 typename A4, typename X1, typename X2, typename X3, typename X4> 3578 typename A4, typename X1, typename X2, typename X3, typename X4>
3464 inline MutantFunctor<R, Tuple<A1, A2, A3, A4>> 3579 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
3465 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, A1, A2, A3, A4), 3580 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, A1, A2, A3, A4),
3466 const P1& p1, const P2& p2, const P3& p3, const P4& p4) { 3581 const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
3467 MutantRunner<R, Tuple<A1, A2, A3, A4>>* t = 3582 MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
3468 new Mutant<R, T, R (U::*)(X1, X2, X3, X4, A1, A2, A3, A4), 3583 new Mutant<R, T, R (U::*)(X1, X2, X3, X4, A1, A2, A3, A4),
3469 Tuple<P1, P2, P3, P4>, Tuple<A1, A2, A3, A4>> 3584 base::Tuple<P1, P2, P3, P4>, base::Tuple<A1, A2, A3, A4>>
3470 (obj, method, MakeTuple(p1, p2, p3, p4)); 3585 (obj, method, base::MakeTuple(p1, p2, p3, p4));
3471 return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t); 3586 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
3472 } 3587 }
3473 3588
3474 template <typename R, typename P1, typename P2, typename P3, typename P4, 3589 template <typename R, typename P1, typename P2, typename P3, typename P4,
3475 typename A1, typename A2, typename A3, typename A4, typename X1, 3590 typename A1, typename A2, typename A3, typename A4, typename X1,
3476 typename X2, typename X3, typename X4> 3591 typename X2, typename X3, typename X4>
3477 inline MutantFunctor<R, Tuple<A1, A2, A3, A4>> 3592 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
3478 CreateFunctor(R (*function)(X1, X2, X3, X4, A1, A2, A3, A4), const P1& p1, 3593 CreateFunctor(R (*function)(X1, X2, X3, X4, A1, A2, A3, A4), const P1& p1,
3479 const P2& p2, const P3& p3, const P4& p4) { 3594 const P2& p2, const P3& p3, const P4& p4) {
3480 MutantRunner<R, Tuple<A1, A2, A3, A4>>* t = 3595 MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
3481 new MutantFunction<R, R (*)(X1, X2, X3, X4, A1, A2, A3, A4), 3596 new MutantFunction<R, R (*)(X1, X2, X3, X4, A1, A2, A3, A4),
3482 Tuple<P1, P2, P3, P4>, Tuple<A1, A2, A3, A4>> 3597 base::Tuple<P1, P2, P3, P4>, base::Tuple<A1, A2, A3,
3483 (function, MakeTuple(p1, p2, p3, p4)); 3598 A4>>
3484 return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t); 3599 (function, base::MakeTuple(p1, p2, p3, p4));
3600 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
3485 } 3601 }
3486 3602
3487 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 3603 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3488 template <typename R, typename T, typename U, typename P1, typename P2, 3604 template <typename R, typename T, typename U, typename P1, typename P2,
3489 typename P3, typename P4, typename A1, typename A2, typename A3, 3605 typename P3, typename P4, typename A1, typename A2, typename A3,
3490 typename A4, typename X1, typename X2, typename X3, typename X4> 3606 typename A4, typename X1, typename X2, typename X3, typename X4>
3491 inline MutantFunctor<R, Tuple<A1, A2, A3, A4>> 3607 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
3492 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, A1, A2, A3, A4), 3608 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, A1, A2, A3, A4),
3493 const P1& p1, const P2& p2, const P3& p3, const P4& p4) { 3609 const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
3494 MutantRunner<R, Tuple<A1, A2, A3, A4>>* t = 3610 MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
3495 new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, A1, A2, A3, A4), 3611 new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, A1, A2, A3, A4),
3496 Tuple<P1, P2, P3, P4>, Tuple<A1, A2, A3, A4>> 3612 base::Tuple<P1, P2, P3, P4>, base::Tuple<A1, A2, A3, A4>>
3497 (obj, method, MakeTuple(p1, p2, p3, p4)); 3613 (obj, method, base::MakeTuple(p1, p2, p3, p4));
3498 return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t); 3614 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
3499 } 3615 }
3500 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 3616 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3501 3617
3502 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 3618 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
3503 template <typename R, typename T, typename U, typename P1, typename P2, 3619 template <typename R, typename T, typename U, typename P1, typename P2,
3504 typename P3, typename P4, typename A1, typename A2, typename A3, 3620 typename P3, typename P4, typename A1, typename A2, typename A3,
3505 typename A4, typename X1, typename X2, typename X3, typename X4> 3621 typename A4, typename X1, typename X2, typename X3, typename X4>
3506 inline MutantFunctor<R, Tuple<A1, A2, A3, A4>> 3622 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
3507 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, A1, A2, A3, A4), 3623 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, A1, A2, A3, A4),
3508 const P1& p1, const P2& p2, const P3& p3, const P4& p4) { 3624 const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
3509 MutantRunner<R, Tuple<A1, A2, A3, A4>>* t = 3625 MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
3510 new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, A1, A2, A3, A4), 3626 new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, A1, A2, A3, A4),
3511 Tuple<P1, P2, P3, P4>, Tuple<A1, A2, A3, A4>> 3627 base::Tuple<P1, P2, P3, P4>, base::Tuple<A1, A2, A3, A4>>
3512 (obj, method, MakeTuple(p1, p2, p3, p4)); 3628 (obj, method, base::MakeTuple(p1, p2, p3, p4));
3513 return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t); 3629 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
3514 } 3630 }
3515 3631
3516 template <typename R, typename P1, typename P2, typename P3, typename P4, 3632 template <typename R, typename P1, typename P2, typename P3, typename P4,
3517 typename A1, typename A2, typename A3, typename A4, typename X1, 3633 typename A1, typename A2, typename A3, typename A4, typename X1,
3518 typename X2, typename X3, typename X4> 3634 typename X2, typename X3, typename X4>
3519 inline MutantFunctor<R, Tuple<A1, A2, A3, A4>> 3635 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
3520 CreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, A1, A2, A3, A4), 3636 CreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, A1, A2, A3, A4),
3521 const P1& p1, const P2& p2, const P3& p3, const P4& p4) { 3637 const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
3522 MutantRunner<R, Tuple<A1, A2, A3, A4>>* t = 3638 MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
3523 new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, A1, A2, A3, A4), 3639 new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, A1, A2, A3, A4),
3524 Tuple<P1, P2, P3, P4>, Tuple<A1, A2, A3, A4>> 3640 base::Tuple<P1, P2, P3, P4>, base::Tuple<A1, A2, A3,
3525 (function, MakeTuple(p1, p2, p3, p4)); 3641 A4>>
3526 return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t); 3642 (function, base::MakeTuple(p1, p2, p3, p4));
3643 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
3527 } 3644 }
3528 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 3645 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3529 template <typename R, typename T, typename U, typename P1, typename P2, 3646 template <typename R, typename T, typename U, typename P1, typename P2,
3530 typename P3, typename P4, typename A1, typename A2, typename A3, 3647 typename P3, typename P4, typename A1, typename A2, typename A3,
3531 typename A4, typename X1, typename X2, typename X3, typename X4> 3648 typename A4, typename X1, typename X2, typename X3, typename X4>
3532 inline MutantFunctor<R, Tuple<A1, A2, A3, A4>> 3649 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
3533 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, A1, A2, A3, A4), 3650 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, A1, A2, A3, A4),
3534 const P1& p1, const P2& p2, const P3& p3, const P4& p4) { 3651 const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
3535 MutantRunner<R, Tuple<A1, A2, A3, A4>>* t = 3652 MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
3536 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, A1, A2, A3, A4), 3653 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, A1, A2, A3, A4),
3537 Tuple<P1, P2, P3, P4>, Tuple<A1, A2, A3, A4>> 3654 base::Tuple<P1, P2, P3, P4>, base::Tuple<A1, A2, A3, A4>>
3538 (obj, method, MakeTuple(p1, p2, p3, p4)); 3655 (obj, method, base::MakeTuple(p1, p2, p3, p4));
3539 return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t); 3656 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
3540 } 3657 }
3541 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 3658 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3542 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 3659 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
3543 3660
3544 // 4 - 5 3661 // 4 - 5
3545 template <typename R, typename T, typename U, typename P1, typename P2, 3662 template <typename R, typename T, typename U, typename P1, typename P2,
3546 typename P3, typename P4, typename A1, typename A2, typename A3, 3663 typename P3, typename P4, typename A1, typename A2, typename A3,
3547 typename A4, typename A5, typename X1, typename X2, typename X3, 3664 typename A4, typename A5, typename X1, typename X2, typename X3,
3548 typename X4> 3665 typename X4>
3549 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>> 3666 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
3550 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, A1, A2, A3, A4, A5), 3667 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, A1, A2, A3, A4, A5),
3551 const P1& p1, const P2& p2, const P3& p3, const P4& p4) { 3668 const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
3552 MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t = 3669 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
3553 new Mutant<R, T, R (U::*)(X1, X2, X3, X4, A1, A2, A3, A4, A5), 3670 new Mutant<R, T, R (U::*)(X1, X2, X3, X4, A1, A2, A3, A4, A5),
3554 Tuple<P1, P2, P3, P4>, Tuple<A1, A2, A3, A4, A5>> 3671 base::Tuple<P1, P2, P3, P4>, base::Tuple<A1, A2, A3, A4, A5>>
3555 (obj, method, MakeTuple(p1, p2, p3, p4)); 3672 (obj, method, base::MakeTuple(p1, p2, p3, p4));
3556 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t); 3673 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
3557 } 3674 }
3558 3675
3559 template <typename R, typename P1, typename P2, typename P3, typename P4, 3676 template <typename R, typename P1, typename P2, typename P3, typename P4,
3560 typename A1, typename A2, typename A3, typename A4, typename A5, 3677 typename A1, typename A2, typename A3, typename A4, typename A5,
3561 typename X1, typename X2, typename X3, typename X4> 3678 typename X1, typename X2, typename X3, typename X4>
3562 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>> 3679 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
3563 CreateFunctor(R (*function)(X1, X2, X3, X4, A1, A2, A3, A4, A5), const P1& p1, 3680 CreateFunctor(R (*function)(X1, X2, X3, X4, A1, A2, A3, A4, A5), const P1& p1,
3564 const P2& p2, const P3& p3, const P4& p4) { 3681 const P2& p2, const P3& p3, const P4& p4) {
3565 MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t = 3682 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
3566 new MutantFunction<R, R (*)(X1, X2, X3, X4, A1, A2, A3, A4, A5), 3683 new MutantFunction<R, R (*)(X1, X2, X3, X4, A1, A2, A3, A4, A5),
3567 Tuple<P1, P2, P3, P4>, Tuple<A1, A2, A3, A4, A5>> 3684 base::Tuple<P1, P2, P3, P4>, base::Tuple<A1, A2, A3,
3568 (function, MakeTuple(p1, p2, p3, p4)); 3685 A4, A5>>
3569 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t); 3686 (function, base::MakeTuple(p1, p2, p3, p4));
3687 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
3570 } 3688 }
3571 3689
3572 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 3690 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3573 template <typename R, typename T, typename U, typename P1, typename P2, 3691 template <typename R, typename T, typename U, typename P1, typename P2,
3574 typename P3, typename P4, typename A1, typename A2, typename A3, 3692 typename P3, typename P4, typename A1, typename A2, typename A3,
3575 typename A4, typename A5, typename X1, typename X2, typename X3, 3693 typename A4, typename A5, typename X1, typename X2, typename X3,
3576 typename X4> 3694 typename X4>
3577 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>> 3695 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
3578 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, A1, A2, A3, A4, A5), 3696 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, A1, A2, A3, A4, A5),
3579 const P1& p1, const P2& p2, const P3& p3, const P4& p4) { 3697 const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
3580 MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t = 3698 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
3581 new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, A1, A2, A3, A4, A5 ), 3699 new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, A1, A2, A3, A4, A5 ),
3582 Tuple<P1, P2, P3, P4>, Tuple<A1, A2, A3, A4, A5>> 3700 base::Tuple<P1, P2, P3, P4>, base::Tuple<A1, A2, A3, A4, A5>>
3583 (obj, method, MakeTuple(p1, p2, p3, p4)); 3701 (obj, method, base::MakeTuple(p1, p2, p3, p4));
3584 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t); 3702 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
3585 } 3703 }
3586 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 3704 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3587 3705
3588 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 3706 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
3589 template <typename R, typename T, typename U, typename P1, typename P2, 3707 template <typename R, typename T, typename U, typename P1, typename P2,
3590 typename P3, typename P4, typename A1, typename A2, typename A3, 3708 typename P3, typename P4, typename A1, typename A2, typename A3,
3591 typename A4, typename A5, typename X1, typename X2, typename X3, 3709 typename A4, typename A5, typename X1, typename X2, typename X3,
3592 typename X4> 3710 typename X4>
3593 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>> 3711 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
3594 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, A1, A2, A3, A4, 3712 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, A1, A2, A3, A4,
3595 A5), const P1& p1, const P2& p2, const P3& p3, const P4& p4) { 3713 A5), const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
3596 MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t = 3714 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
3597 new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, A1, A2, A3, A4, A5), 3715 new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, A1, A2, A3, A4, A5),
3598 Tuple<P1, P2, P3, P4>, Tuple<A1, A2, A3, A4, A5>> 3716 base::Tuple<P1, P2, P3, P4>, base::Tuple<A1, A2, A3, A4, A5>>
3599 (obj, method, MakeTuple(p1, p2, p3, p4)); 3717 (obj, method, base::MakeTuple(p1, p2, p3, p4));
3600 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t); 3718 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
3601 } 3719 }
3602 3720
3603 template <typename R, typename P1, typename P2, typename P3, typename P4, 3721 template <typename R, typename P1, typename P2, typename P3, typename P4,
3604 typename A1, typename A2, typename A3, typename A4, typename A5, 3722 typename A1, typename A2, typename A3, typename A4, typename A5,
3605 typename X1, typename X2, typename X3, typename X4> 3723 typename X1, typename X2, typename X3, typename X4>
3606 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>> 3724 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
3607 CreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, A1, A2, A3, A4, A5), 3725 CreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, A1, A2, A3, A4, A5),
3608 const P1& p1, const P2& p2, const P3& p3, const P4& p4) { 3726 const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
3609 MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t = 3727 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
3610 new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, A1, A2, A3, A4, A5), 3728 new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, A1, A2, A3, A4, A5),
3611 Tuple<P1, P2, P3, P4>, Tuple<A1, A2, A3, A4, A5>> 3729 base::Tuple<P1, P2, P3, P4>, base::Tuple<A1, A2, A3,
3612 (function, MakeTuple(p1, p2, p3, p4)); 3730 A4, A5>>
3613 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t); 3731 (function, base::MakeTuple(p1, p2, p3, p4));
3732 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
3614 } 3733 }
3615 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 3734 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3616 template <typename R, typename T, typename U, typename P1, typename P2, 3735 template <typename R, typename T, typename U, typename P1, typename P2,
3617 typename P3, typename P4, typename A1, typename A2, typename A3, 3736 typename P3, typename P4, typename A1, typename A2, typename A3,
3618 typename A4, typename A5, typename X1, typename X2, typename X3, 3737 typename A4, typename A5, typename X1, typename X2, typename X3,
3619 typename X4> 3738 typename X4>
3620 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>> 3739 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
3621 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, A1, A2, A3, A4, 3740 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, A1, A2, A3, A4,
3622 A5), const P1& p1, const P2& p2, const P3& p3, const P4& p4) { 3741 A5), const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
3623 MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t = 3742 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
3624 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, A1, A2, A3, A4, A5), 3743 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, A1, A2, A3, A4, A5),
3625 Tuple<P1, P2, P3, P4>, Tuple<A1, A2, A3, A4, A5>> 3744 base::Tuple<P1, P2, P3, P4>, base::Tuple<A1, A2, A3, A4, A5>>
3626 (obj, method, MakeTuple(p1, p2, p3, p4)); 3745 (obj, method, base::MakeTuple(p1, p2, p3, p4));
3627 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t); 3746 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
3628 } 3747 }
3629 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 3748 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3630 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 3749 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
3631 3750
3632 // 4 - 6 3751 // 4 - 6
3633 template <typename R, typename T, typename U, typename P1, typename P2, 3752 template <typename R, typename T, typename U, typename P1, typename P2,
3634 typename P3, typename P4, typename A1, typename A2, typename A3, 3753 typename P3, typename P4, typename A1, typename A2, typename A3,
3635 typename A4, typename A5, typename A6, typename X1, typename X2, 3754 typename A4, typename A5, typename A6, typename X1, typename X2,
3636 typename X3, typename X4> 3755 typename X3, typename X4>
3637 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>> 3756 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
3638 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, A1, A2, A3, A4, A5, A6), 3757 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, A1, A2, A3, A4, A5, A6),
3639 const P1& p1, const P2& p2, const P3& p3, const P4& p4) { 3758 const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
3640 MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t = 3759 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
3641 new Mutant<R, T, R (U::*)(X1, X2, X3, X4, A1, A2, A3, A4, A5, A6), 3760 new Mutant<R, T, R (U::*)(X1, X2, X3, X4, A1, A2, A3, A4, A5, A6),
3642 Tuple<P1, P2, P3, P4>, Tuple<A1, A2, A3, A4, A5, A6>> 3761 base::Tuple<P1, P2, P3, P4>, base::Tuple<A1, A2, A3, A4, A5,
3643 (obj, method, MakeTuple(p1, p2, p3, p4)); 3762 A6>>
3644 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t); 3763 (obj, method, base::MakeTuple(p1, p2, p3, p4));
3764 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
3645 } 3765 }
3646 3766
3647 template <typename R, typename P1, typename P2, typename P3, typename P4, 3767 template <typename R, typename P1, typename P2, typename P3, typename P4,
3648 typename A1, typename A2, typename A3, typename A4, typename A5, 3768 typename A1, typename A2, typename A3, typename A4, typename A5,
3649 typename A6, typename X1, typename X2, typename X3, typename X4> 3769 typename A6, typename X1, typename X2, typename X3, typename X4>
3650 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>> 3770 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
3651 CreateFunctor(R (*function)(X1, X2, X3, X4, A1, A2, A3, A4, A5, A6), 3771 CreateFunctor(R (*function)(X1, X2, X3, X4, A1, A2, A3, A4, A5, A6),
3652 const P1& p1, const P2& p2, const P3& p3, const P4& p4) { 3772 const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
3653 MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t = 3773 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
3654 new MutantFunction<R, R (*)(X1, X2, X3, X4, A1, A2, A3, A4, A5, A6), 3774 new MutantFunction<R, R (*)(X1, X2, X3, X4, A1, A2, A3, A4, A5, A6),
3655 Tuple<P1, P2, P3, P4>, Tuple<A1, A2, A3, A4, A5, A6>> 3775 base::Tuple<P1, P2, P3, P4>, base::Tuple<A1, A2, A3,
3656 (function, MakeTuple(p1, p2, p3, p4)); 3776 A4, A5, A6>>
3657 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t); 3777 (function, base::MakeTuple(p1, p2, p3, p4));
3778 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
3658 } 3779 }
3659 3780
3660 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 3781 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3661 template <typename R, typename T, typename U, typename P1, typename P2, 3782 template <typename R, typename T, typename U, typename P1, typename P2,
3662 typename P3, typename P4, typename A1, typename A2, typename A3, 3783 typename P3, typename P4, typename A1, typename A2, typename A3,
3663 typename A4, typename A5, typename A6, typename X1, typename X2, 3784 typename A4, typename A5, typename A6, typename X1, typename X2,
3664 typename X3, typename X4> 3785 typename X3, typename X4>
3665 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>> 3786 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
3666 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, A1, A2, A3, A4, A5, A6), 3787 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, A1, A2, A3, A4, A5, A6),
3667 const P1& p1, const P2& p2, const P3& p3, const P4& p4) { 3788 const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
3668 MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t = 3789 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
3669 new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, A1, A2, A3, A4, A5 , A6), 3790 new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, A1, A2, A3, A4, A5 , A6),
3670 Tuple<P1, P2, P3, P4>, Tuple<A1, A2, A3, A4, A5, A6>> 3791 base::Tuple<P1, P2, P3, P4>, base::Tuple<A1, A2, A3, A4, A5,
3671 (obj, method, MakeTuple(p1, p2, p3, p4)); 3792 A6>>
3672 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t); 3793 (obj, method, base::MakeTuple(p1, p2, p3, p4));
3794 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
3673 } 3795 }
3674 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 3796 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3675 3797
3676 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 3798 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
3677 template <typename R, typename T, typename U, typename P1, typename P2, 3799 template <typename R, typename T, typename U, typename P1, typename P2,
3678 typename P3, typename P4, typename A1, typename A2, typename A3, 3800 typename P3, typename P4, typename A1, typename A2, typename A3,
3679 typename A4, typename A5, typename A6, typename X1, typename X2, 3801 typename A4, typename A5, typename A6, typename X1, typename X2,
3680 typename X3, typename X4> 3802 typename X3, typename X4>
3681 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>> 3803 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
3682 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, A1, A2, A3, A4, 3804 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, A1, A2, A3, A4,
3683 A5, A6), const P1& p1, const P2& p2, const P3& p3, const P4& p4) { 3805 A5, A6), const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
3684 MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t = 3806 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
3685 new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, A1, A2, A3, A4, A5, A6 ), 3807 new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, A1, A2, A3, A4, A5,
3686 Tuple<P1, P2, P3, P4>, Tuple<A1, A2, A3, A4, A5, A6>> 3808 A6),
3687 (obj, method, MakeTuple(p1, p2, p3, p4)); 3809 base::Tuple<P1, P2, P3, P4>, base::Tuple<A1, A2, A3, A4, A5,
3688 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t); 3810 A6>>
3811 (obj, method, base::MakeTuple(p1, p2, p3, p4));
3812 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
3689 } 3813 }
3690 3814
3691 template <typename R, typename P1, typename P2, typename P3, typename P4, 3815 template <typename R, typename P1, typename P2, typename P3, typename P4,
3692 typename A1, typename A2, typename A3, typename A4, typename A5, 3816 typename A1, typename A2, typename A3, typename A4, typename A5,
3693 typename A6, typename X1, typename X2, typename X3, typename X4> 3817 typename A6, typename X1, typename X2, typename X3, typename X4>
3694 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>> 3818 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
3695 CreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, A1, A2, A3, A4, A5, A6), 3819 CreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, A1, A2, A3, A4, A5, A6),
3696 const P1& p1, const P2& p2, const P3& p3, const P4& p4) { 3820 const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
3697 MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t = 3821 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
3698 new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, A1, A2, A3, A4, A5, A6), 3822 new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, A1, A2, A3, A4, A5,
3699 Tuple<P1, P2, P3, P4>, Tuple<A1, A2, A3, A4, A5, A6>> 3823 A6),
3700 (function, MakeTuple(p1, p2, p3, p4)); 3824 base::Tuple<P1, P2, P3, P4>, base::Tuple<A1, A2, A3,
3701 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t); 3825 A4, A5, A6>>
3826 (function, base::MakeTuple(p1, p2, p3, p4));
3827 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
3702 } 3828 }
3703 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 3829 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3704 template <typename R, typename T, typename U, typename P1, typename P2, 3830 template <typename R, typename T, typename U, typename P1, typename P2,
3705 typename P3, typename P4, typename A1, typename A2, typename A3, 3831 typename P3, typename P4, typename A1, typename A2, typename A3,
3706 typename A4, typename A5, typename A6, typename X1, typename X2, 3832 typename A4, typename A5, typename A6, typename X1, typename X2,
3707 typename X3, typename X4> 3833 typename X3, typename X4>
3708 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>> 3834 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
3709 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, A1, A2, A3, A4, 3835 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, A1, A2, A3, A4,
3710 A5, A6), const P1& p1, const P2& p2, const P3& p3, const P4& p4) { 3836 A5, A6), const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
3711 MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t = 3837 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
3712 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, A1, A2, A3, A4, A5, A6), 3838 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, A1, A2, A3, A4, A5,
3713 Tuple<P1, P2, P3, P4>, Tuple<A1, A2, A3, A4, A5, A6>> 3839 A6),
3714 (obj, method, MakeTuple(p1, p2, p3, p4)); 3840 base::Tuple<P1, P2, P3, P4>, base::Tuple<A1, A2, A3, A4, A5,
3715 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t); 3841 A6>>
3842 (obj, method, base::MakeTuple(p1, p2, p3, p4));
3843 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
3716 } 3844 }
3717 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 3845 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3718 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 3846 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
3719 3847
3720 // 5 - 0 3848 // 5 - 0
3721 template <typename R, typename T, typename U, typename P1, typename P2, 3849 template <typename R, typename T, typename U, typename P1, typename P2,
3722 typename P3, typename P4, typename P5, typename X1, typename X2, 3850 typename P3, typename P4, typename P5, typename X1, typename X2,
3723 typename X3, typename X4, typename X5> 3851 typename X3, typename X4, typename X5>
3724 inline MutantFunctor<R, Tuple<>> 3852 inline MutantFunctor<R, base::Tuple<>>
3725 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, X5), const P1& p1, 3853 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, X5), const P1& p1,
3726 const P2& p2, const P3& p3, const P4& p4, const P5& p5) { 3854 const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
3727 MutantRunner<R, Tuple<>>* t = 3855 MutantRunner<R, base::Tuple<>>* t =
3728 new Mutant<R, T, R (U::*)(X1, X2, X3, X4, X5), 3856 new Mutant<R, T, R (U::*)(X1, X2, X3, X4, X5),
3729 Tuple<P1, P2, P3, P4, P5>, Tuple<>> 3857 base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<>>
3730 (obj, method, MakeTuple(p1, p2, p3, p4, p5)); 3858 (obj, method, base::MakeTuple(p1, p2, p3, p4, p5));
3731 return MutantFunctor<R, Tuple<>>(t); 3859 return MutantFunctor<R, base::Tuple<>>(t);
3732 } 3860 }
3733 3861
3734 template <typename R, typename P1, typename P2, typename P3, typename P4, 3862 template <typename R, typename P1, typename P2, typename P3, typename P4,
3735 typename P5, typename X1, typename X2, typename X3, typename X4, 3863 typename P5, typename X1, typename X2, typename X3, typename X4,
3736 typename X5> 3864 typename X5>
3737 inline MutantFunctor<R, Tuple<>> 3865 inline MutantFunctor<R, base::Tuple<>>
3738 CreateFunctor(R (*function)(X1, X2, X3, X4, X5), const P1& p1, const P2& p2, 3866 CreateFunctor(R (*function)(X1, X2, X3, X4, X5), const P1& p1, const P2& p2,
3739 const P3& p3, const P4& p4, const P5& p5) { 3867 const P3& p3, const P4& p4, const P5& p5) {
3740 MutantRunner<R, Tuple<>>* t = 3868 MutantRunner<R, base::Tuple<>>* t =
3741 new MutantFunction<R, R (*)(X1, X2, X3, X4, X5), 3869 new MutantFunction<R, R (*)(X1, X2, X3, X4, X5),
3742 Tuple<P1, P2, P3, P4, P5>, Tuple<>> 3870 base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<>>
3743 (function, MakeTuple(p1, p2, p3, p4, p5)); 3871 (function, base::MakeTuple(p1, p2, p3, p4, p5));
3744 return MutantFunctor<R, Tuple<>>(t); 3872 return MutantFunctor<R, base::Tuple<>>(t);
3745 } 3873 }
3746 3874
3747 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 3875 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3748 template <typename R, typename T, typename U, typename P1, typename P2, 3876 template <typename R, typename T, typename U, typename P1, typename P2,
3749 typename P3, typename P4, typename P5, typename X1, typename X2, 3877 typename P3, typename P4, typename P5, typename X1, typename X2,
3750 typename X3, typename X4, typename X5> 3878 typename X3, typename X4, typename X5>
3751 inline MutantFunctor<R, Tuple<>> 3879 inline MutantFunctor<R, base::Tuple<>>
3752 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, X5), const P1& p1, 3880 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, X5), const P1& p1,
3753 const P2& p2, const P3& p3, const P4& p4, const P5& p5) { 3881 const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
3754 MutantRunner<R, Tuple<>>* t = 3882 MutantRunner<R, base::Tuple<>>* t =
3755 new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, X5), 3883 new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, X5),
3756 Tuple<P1, P2, P3, P4, P5>, Tuple<>> 3884 base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<>>
3757 (obj, method, MakeTuple(p1, p2, p3, p4, p5)); 3885 (obj, method, base::MakeTuple(p1, p2, p3, p4, p5));
3758 return MutantFunctor<R, Tuple<>>(t); 3886 return MutantFunctor<R, base::Tuple<>>(t);
3759 } 3887 }
3760 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 3888 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3761 3889
3762 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 3890 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
3763 template <typename R, typename T, typename U, typename P1, typename P2, 3891 template <typename R, typename T, typename U, typename P1, typename P2,
3764 typename P3, typename P4, typename P5, typename X1, typename X2, 3892 typename P3, typename P4, typename P5, typename X1, typename X2,
3765 typename X3, typename X4, typename X5> 3893 typename X3, typename X4, typename X5>
3766 inline MutantFunctor<R, Tuple<>> 3894 inline MutantFunctor<R, base::Tuple<>>
3767 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5), 3895 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5),
3768 const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) { 3896 const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
3769 MutantRunner<R, Tuple<>>* t = 3897 MutantRunner<R, base::Tuple<>>* t =
3770 new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5), 3898 new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5),
3771 Tuple<P1, P2, P3, P4, P5>, Tuple<>> 3899 base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<>>
3772 (obj, method, MakeTuple(p1, p2, p3, p4, p5)); 3900 (obj, method, base::MakeTuple(p1, p2, p3, p4, p5));
3773 return MutantFunctor<R, Tuple<>>(t); 3901 return MutantFunctor<R, base::Tuple<>>(t);
3774 } 3902 }
3775 3903
3776 template <typename R, typename P1, typename P2, typename P3, typename P4, 3904 template <typename R, typename P1, typename P2, typename P3, typename P4,
3777 typename P5, typename X1, typename X2, typename X3, typename X4, 3905 typename P5, typename X1, typename X2, typename X3, typename X4,
3778 typename X5> 3906 typename X5>
3779 inline MutantFunctor<R, Tuple<>> 3907 inline MutantFunctor<R, base::Tuple<>>
3780 CreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, X5), const P1& p1, 3908 CreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, X5), const P1& p1,
3781 const P2& p2, const P3& p3, const P4& p4, const P5& p5) { 3909 const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
3782 MutantRunner<R, Tuple<>>* t = 3910 MutantRunner<R, base::Tuple<>>* t =
3783 new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, X5), 3911 new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, X5),
3784 Tuple<P1, P2, P3, P4, P5>, Tuple<>> 3912 base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<>>
3785 (function, MakeTuple(p1, p2, p3, p4, p5)); 3913 (function, base::MakeTuple(p1, p2, p3, p4, p5));
3786 return MutantFunctor<R, Tuple<>>(t); 3914 return MutantFunctor<R, base::Tuple<>>(t);
3787 } 3915 }
3788 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 3916 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3789 template <typename R, typename T, typename U, typename P1, typename P2, 3917 template <typename R, typename T, typename U, typename P1, typename P2,
3790 typename P3, typename P4, typename P5, typename X1, typename X2, 3918 typename P3, typename P4, typename P5, typename X1, typename X2,
3791 typename X3, typename X4, typename X5> 3919 typename X3, typename X4, typename X5>
3792 inline MutantFunctor<R, Tuple<>> 3920 inline MutantFunctor<R, base::Tuple<>>
3793 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5), 3921 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5),
3794 const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) { 3922 const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
3795 MutantRunner<R, Tuple<>>* t = 3923 MutantRunner<R, base::Tuple<>>* t =
3796 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5), 3924 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5),
3797 Tuple<P1, P2, P3, P4, P5>, Tuple<>> 3925 base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<>>
3798 (obj, method, MakeTuple(p1, p2, p3, p4, p5)); 3926 (obj, method, base::MakeTuple(p1, p2, p3, p4, p5));
3799 return MutantFunctor<R, Tuple<>>(t); 3927 return MutantFunctor<R, base::Tuple<>>(t);
3800 } 3928 }
3801 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 3929 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3802 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 3930 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
3803 3931
3804 // 5 - 1 3932 // 5 - 1
3805 template <typename R, typename T, typename U, typename P1, typename P2, 3933 template <typename R, typename T, typename U, typename P1, typename P2,
3806 typename P3, typename P4, typename P5, typename A1, typename X1, 3934 typename P3, typename P4, typename P5, typename A1, typename X1,
3807 typename X2, typename X3, typename X4, typename X5> 3935 typename X2, typename X3, typename X4, typename X5>
3808 inline MutantFunctor<R, Tuple<A1>> 3936 inline MutantFunctor<R, base::Tuple<A1>>
3809 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, X5, A1), const P1& p1, 3937 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, X5, A1), const P1& p1,
3810 const P2& p2, const P3& p3, const P4& p4, const P5& p5) { 3938 const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
3811 MutantRunner<R, Tuple<A1>>* t = 3939 MutantRunner<R, base::Tuple<A1>>* t =
3812 new Mutant<R, T, R (U::*)(X1, X2, X3, X4, X5, A1), 3940 new Mutant<R, T, R (U::*)(X1, X2, X3, X4, X5, A1),
3813 Tuple<P1, P2, P3, P4, P5>, Tuple<A1>> 3941 base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<A1>>
3814 (obj, method, MakeTuple(p1, p2, p3, p4, p5)); 3942 (obj, method, base::MakeTuple(p1, p2, p3, p4, p5));
3815 return MutantFunctor<R, Tuple<A1>>(t); 3943 return MutantFunctor<R, base::Tuple<A1>>(t);
3816 } 3944 }
3817 3945
3818 template <typename R, typename P1, typename P2, typename P3, typename P4, 3946 template <typename R, typename P1, typename P2, typename P3, typename P4,
3819 typename P5, typename A1, typename X1, typename X2, typename X3, 3947 typename P5, typename A1, typename X1, typename X2, typename X3,
3820 typename X4, typename X5> 3948 typename X4, typename X5>
3821 inline MutantFunctor<R, Tuple<A1>> 3949 inline MutantFunctor<R, base::Tuple<A1>>
3822 CreateFunctor(R (*function)(X1, X2, X3, X4, X5, A1), const P1& p1, const P2& p2, 3950 CreateFunctor(R (*function)(X1, X2, X3, X4, X5, A1), const P1& p1, const P2& p2,
3823 const P3& p3, const P4& p4, const P5& p5) { 3951 const P3& p3, const P4& p4, const P5& p5) {
3824 MutantRunner<R, Tuple<A1>>* t = 3952 MutantRunner<R, base::Tuple<A1>>* t =
3825 new MutantFunction<R, R (*)(X1, X2, X3, X4, X5, A1), 3953 new MutantFunction<R, R (*)(X1, X2, X3, X4, X5, A1),
3826 Tuple<P1, P2, P3, P4, P5>, Tuple<A1>> 3954 base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<A1>>
3827 (function, MakeTuple(p1, p2, p3, p4, p5)); 3955 (function, base::MakeTuple(p1, p2, p3, p4, p5));
3828 return MutantFunctor<R, Tuple<A1>>(t); 3956 return MutantFunctor<R, base::Tuple<A1>>(t);
3829 } 3957 }
3830 3958
3831 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 3959 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3832 template <typename R, typename T, typename U, typename P1, typename P2, 3960 template <typename R, typename T, typename U, typename P1, typename P2,
3833 typename P3, typename P4, typename P5, typename A1, typename X1, 3961 typename P3, typename P4, typename P5, typename A1, typename X1,
3834 typename X2, typename X3, typename X4, typename X5> 3962 typename X2, typename X3, typename X4, typename X5>
3835 inline MutantFunctor<R, Tuple<A1>> 3963 inline MutantFunctor<R, base::Tuple<A1>>
3836 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, X5, A1), const P1& p1, 3964 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, X5, A1), const P1& p1,
3837 const P2& p2, const P3& p3, const P4& p4, const P5& p5) { 3965 const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
3838 MutantRunner<R, Tuple<A1>>* t = 3966 MutantRunner<R, base::Tuple<A1>>* t =
3839 new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, X5, A1), 3967 new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, X5, A1),
3840 Tuple<P1, P2, P3, P4, P5>, Tuple<A1>> 3968 base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<A1>>
3841 (obj, method, MakeTuple(p1, p2, p3, p4, p5)); 3969 (obj, method, base::MakeTuple(p1, p2, p3, p4, p5));
3842 return MutantFunctor<R, Tuple<A1>>(t); 3970 return MutantFunctor<R, base::Tuple<A1>>(t);
3843 } 3971 }
3844 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 3972 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3845 3973
3846 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 3974 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
3847 template <typename R, typename T, typename U, typename P1, typename P2, 3975 template <typename R, typename T, typename U, typename P1, typename P2,
3848 typename P3, typename P4, typename P5, typename A1, typename X1, 3976 typename P3, typename P4, typename P5, typename A1, typename X1,
3849 typename X2, typename X3, typename X4, typename X5> 3977 typename X2, typename X3, typename X4, typename X5>
3850 inline MutantFunctor<R, Tuple<A1>> 3978 inline MutantFunctor<R, base::Tuple<A1>>
3851 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, A1), 3979 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, A1),
3852 const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) { 3980 const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
3853 MutantRunner<R, Tuple<A1>>* t = 3981 MutantRunner<R, base::Tuple<A1>>* t =
3854 new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, A1), 3982 new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, A1),
3855 Tuple<P1, P2, P3, P4, P5>, Tuple<A1>> 3983 base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<A1>>
3856 (obj, method, MakeTuple(p1, p2, p3, p4, p5)); 3984 (obj, method, base::MakeTuple(p1, p2, p3, p4, p5));
3857 return MutantFunctor<R, Tuple<A1>>(t); 3985 return MutantFunctor<R, base::Tuple<A1>>(t);
3858 } 3986 }
3859 3987
3860 template <typename R, typename P1, typename P2, typename P3, typename P4, 3988 template <typename R, typename P1, typename P2, typename P3, typename P4,
3861 typename P5, typename A1, typename X1, typename X2, typename X3, 3989 typename P5, typename A1, typename X1, typename X2, typename X3,
3862 typename X4, typename X5> 3990 typename X4, typename X5>
3863 inline MutantFunctor<R, Tuple<A1>> 3991 inline MutantFunctor<R, base::Tuple<A1>>
3864 CreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, X5, A1), const P1& p1, 3992 CreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, X5, A1), const P1& p1,
3865 const P2& p2, const P3& p3, const P4& p4, const P5& p5) { 3993 const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
3866 MutantRunner<R, Tuple<A1>>* t = 3994 MutantRunner<R, base::Tuple<A1>>* t =
3867 new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, X5, A1), 3995 new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, X5, A1),
3868 Tuple<P1, P2, P3, P4, P5>, Tuple<A1>> 3996 base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<A1>>
3869 (function, MakeTuple(p1, p2, p3, p4, p5)); 3997 (function, base::MakeTuple(p1, p2, p3, p4, p5));
3870 return MutantFunctor<R, Tuple<A1>>(t); 3998 return MutantFunctor<R, base::Tuple<A1>>(t);
3871 } 3999 }
3872 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 4000 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3873 template <typename R, typename T, typename U, typename P1, typename P2, 4001 template <typename R, typename T, typename U, typename P1, typename P2,
3874 typename P3, typename P4, typename P5, typename A1, typename X1, 4002 typename P3, typename P4, typename P5, typename A1, typename X1,
3875 typename X2, typename X3, typename X4, typename X5> 4003 typename X2, typename X3, typename X4, typename X5>
3876 inline MutantFunctor<R, Tuple<A1>> 4004 inline MutantFunctor<R, base::Tuple<A1>>
3877 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, A1), 4005 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, A1),
3878 const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) { 4006 const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
3879 MutantRunner<R, Tuple<A1>>* t = 4007 MutantRunner<R, base::Tuple<A1>>* t =
3880 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, A1), 4008 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, A1),
3881 Tuple<P1, P2, P3, P4, P5>, Tuple<A1>> 4009 base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<A1>>
3882 (obj, method, MakeTuple(p1, p2, p3, p4, p5)); 4010 (obj, method, base::MakeTuple(p1, p2, p3, p4, p5));
3883 return MutantFunctor<R, Tuple<A1>>(t); 4011 return MutantFunctor<R, base::Tuple<A1>>(t);
3884 } 4012 }
3885 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 4013 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3886 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 4014 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
3887 4015
3888 // 5 - 2 4016 // 5 - 2
3889 template <typename R, typename T, typename U, typename P1, typename P2, 4017 template <typename R, typename T, typename U, typename P1, typename P2,
3890 typename P3, typename P4, typename P5, typename A1, typename A2, 4018 typename P3, typename P4, typename P5, typename A1, typename A2,
3891 typename X1, typename X2, typename X3, typename X4, typename X5> 4019 typename X1, typename X2, typename X3, typename X4, typename X5>
3892 inline MutantFunctor<R, Tuple<A1, A2>> 4020 inline MutantFunctor<R, base::Tuple<A1, A2>>
3893 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, X5, A1, A2), const P1& p1, 4021 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, X5, A1, A2), const P1& p1,
3894 const P2& p2, const P3& p3, const P4& p4, const P5& p5) { 4022 const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
3895 MutantRunner<R, Tuple<A1, A2>>* t = 4023 MutantRunner<R, base::Tuple<A1, A2>>* t =
3896 new Mutant<R, T, R (U::*)(X1, X2, X3, X4, X5, A1, A2), 4024 new Mutant<R, T, R (U::*)(X1, X2, X3, X4, X5, A1, A2),
3897 Tuple<P1, P2, P3, P4, P5>, Tuple<A1, A2>> 4025 base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<A1, A2>>
3898 (obj, method, MakeTuple(p1, p2, p3, p4, p5)); 4026 (obj, method, base::MakeTuple(p1, p2, p3, p4, p5));
3899 return MutantFunctor<R, Tuple<A1, A2>>(t); 4027 return MutantFunctor<R, base::Tuple<A1, A2>>(t);
3900 } 4028 }
3901 4029
3902 template <typename R, typename P1, typename P2, typename P3, typename P4, 4030 template <typename R, typename P1, typename P2, typename P3, typename P4,
3903 typename P5, typename A1, typename A2, typename X1, typename X2, 4031 typename P5, typename A1, typename A2, typename X1, typename X2,
3904 typename X3, typename X4, typename X5> 4032 typename X3, typename X4, typename X5>
3905 inline MutantFunctor<R, Tuple<A1, A2>> 4033 inline MutantFunctor<R, base::Tuple<A1, A2>>
3906 CreateFunctor(R (*function)(X1, X2, X3, X4, X5, A1, A2), const P1& p1, 4034 CreateFunctor(R (*function)(X1, X2, X3, X4, X5, A1, A2), const P1& p1,
3907 const P2& p2, const P3& p3, const P4& p4, const P5& p5) { 4035 const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
3908 MutantRunner<R, Tuple<A1, A2>>* t = 4036 MutantRunner<R, base::Tuple<A1, A2>>* t =
3909 new MutantFunction<R, R (*)(X1, X2, X3, X4, X5, A1, A2), 4037 new MutantFunction<R, R (*)(X1, X2, X3, X4, X5, A1, A2),
3910 Tuple<P1, P2, P3, P4, P5>, Tuple<A1, A2>> 4038 base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<A1, A2>>
3911 (function, MakeTuple(p1, p2, p3, p4, p5)); 4039 (function, base::MakeTuple(p1, p2, p3, p4, p5));
3912 return MutantFunctor<R, Tuple<A1, A2>>(t); 4040 return MutantFunctor<R, base::Tuple<A1, A2>>(t);
3913 } 4041 }
3914 4042
3915 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 4043 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3916 template <typename R, typename T, typename U, typename P1, typename P2, 4044 template <typename R, typename T, typename U, typename P1, typename P2,
3917 typename P3, typename P4, typename P5, typename A1, typename A2, 4045 typename P3, typename P4, typename P5, typename A1, typename A2,
3918 typename X1, typename X2, typename X3, typename X4, typename X5> 4046 typename X1, typename X2, typename X3, typename X4, typename X5>
3919 inline MutantFunctor<R, Tuple<A1, A2>> 4047 inline MutantFunctor<R, base::Tuple<A1, A2>>
3920 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, X5, A1, A2), const P1& p1, 4048 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, X5, A1, A2), const P1& p1,
3921 const P2& p2, const P3& p3, const P4& p4, const P5& p5) { 4049 const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
3922 MutantRunner<R, Tuple<A1, A2>>* t = 4050 MutantRunner<R, base::Tuple<A1, A2>>* t =
3923 new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, X5, A1, A2), 4051 new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, X5, A1, A2),
3924 Tuple<P1, P2, P3, P4, P5>, Tuple<A1, A2>> 4052 base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<A1, A2>>
3925 (obj, method, MakeTuple(p1, p2, p3, p4, p5)); 4053 (obj, method, base::MakeTuple(p1, p2, p3, p4, p5));
3926 return MutantFunctor<R, Tuple<A1, A2>>(t); 4054 return MutantFunctor<R, base::Tuple<A1, A2>>(t);
3927 } 4055 }
3928 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 4056 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3929 4057
3930 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 4058 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
3931 template <typename R, typename T, typename U, typename P1, typename P2, 4059 template <typename R, typename T, typename U, typename P1, typename P2,
3932 typename P3, typename P4, typename P5, typename A1, typename A2, 4060 typename P3, typename P4, typename P5, typename A1, typename A2,
3933 typename X1, typename X2, typename X3, typename X4, typename X5> 4061 typename X1, typename X2, typename X3, typename X4, typename X5>
3934 inline MutantFunctor<R, Tuple<A1, A2>> 4062 inline MutantFunctor<R, base::Tuple<A1, A2>>
3935 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, A1, A2), 4063 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, A1, A2),
3936 const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) { 4064 const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
3937 MutantRunner<R, Tuple<A1, A2>>* t = 4065 MutantRunner<R, base::Tuple<A1, A2>>* t =
3938 new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, A1, A2), 4066 new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, A1, A2),
3939 Tuple<P1, P2, P3, P4, P5>, Tuple<A1, A2>> 4067 base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<A1, A2>>
3940 (obj, method, MakeTuple(p1, p2, p3, p4, p5)); 4068 (obj, method, base::MakeTuple(p1, p2, p3, p4, p5));
3941 return MutantFunctor<R, Tuple<A1, A2>>(t); 4069 return MutantFunctor<R, base::Tuple<A1, A2>>(t);
3942 } 4070 }
3943 4071
3944 template <typename R, typename P1, typename P2, typename P3, typename P4, 4072 template <typename R, typename P1, typename P2, typename P3, typename P4,
3945 typename P5, typename A1, typename A2, typename X1, typename X2, 4073 typename P5, typename A1, typename A2, typename X1, typename X2,
3946 typename X3, typename X4, typename X5> 4074 typename X3, typename X4, typename X5>
3947 inline MutantFunctor<R, Tuple<A1, A2>> 4075 inline MutantFunctor<R, base::Tuple<A1, A2>>
3948 CreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, X5, A1, A2), const P1& p1, 4076 CreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, X5, A1, A2), const P1& p1,
3949 const P2& p2, const P3& p3, const P4& p4, const P5& p5) { 4077 const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
3950 MutantRunner<R, Tuple<A1, A2>>* t = 4078 MutantRunner<R, base::Tuple<A1, A2>>* t =
3951 new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, X5, A1, A2), 4079 new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, X5, A1, A2),
3952 Tuple<P1, P2, P3, P4, P5>, Tuple<A1, A2>> 4080 base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<A1, A2>>
3953 (function, MakeTuple(p1, p2, p3, p4, p5)); 4081 (function, base::MakeTuple(p1, p2, p3, p4, p5));
3954 return MutantFunctor<R, Tuple<A1, A2>>(t); 4082 return MutantFunctor<R, base::Tuple<A1, A2>>(t);
3955 } 4083 }
3956 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 4084 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3957 template <typename R, typename T, typename U, typename P1, typename P2, 4085 template <typename R, typename T, typename U, typename P1, typename P2,
3958 typename P3, typename P4, typename P5, typename A1, typename A2, 4086 typename P3, typename P4, typename P5, typename A1, typename A2,
3959 typename X1, typename X2, typename X3, typename X4, typename X5> 4087 typename X1, typename X2, typename X3, typename X4, typename X5>
3960 inline MutantFunctor<R, Tuple<A1, A2>> 4088 inline MutantFunctor<R, base::Tuple<A1, A2>>
3961 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, A1, A2), 4089 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, A1, A2),
3962 const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) { 4090 const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
3963 MutantRunner<R, Tuple<A1, A2>>* t = 4091 MutantRunner<R, base::Tuple<A1, A2>>* t =
3964 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, A1, A2), 4092 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, A1, A2),
3965 Tuple<P1, P2, P3, P4, P5>, Tuple<A1, A2>> 4093 base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<A1, A2>>
3966 (obj, method, MakeTuple(p1, p2, p3, p4, p5)); 4094 (obj, method, base::MakeTuple(p1, p2, p3, p4, p5));
3967 return MutantFunctor<R, Tuple<A1, A2>>(t); 4095 return MutantFunctor<R, base::Tuple<A1, A2>>(t);
3968 } 4096 }
3969 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 4097 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3970 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 4098 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
3971 4099
3972 // 5 - 3 4100 // 5 - 3
3973 template <typename R, typename T, typename U, typename P1, typename P2, 4101 template <typename R, typename T, typename U, typename P1, typename P2,
3974 typename P3, typename P4, typename P5, typename A1, typename A2, 4102 typename P3, typename P4, typename P5, typename A1, typename A2,
3975 typename A3, typename X1, typename X2, typename X3, typename X4, 4103 typename A3, typename X1, typename X2, typename X3, typename X4,
3976 typename X5> 4104 typename X5>
3977 inline MutantFunctor<R, Tuple<A1, A2, A3>> 4105 inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
3978 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, X5, A1, A2, A3), 4106 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, X5, A1, A2, A3),
3979 const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) { 4107 const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
3980 MutantRunner<R, Tuple<A1, A2, A3>>* t = 4108 MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
3981 new Mutant<R, T, R (U::*)(X1, X2, X3, X4, X5, A1, A2, A3), 4109 new Mutant<R, T, R (U::*)(X1, X2, X3, X4, X5, A1, A2, A3),
3982 Tuple<P1, P2, P3, P4, P5>, Tuple<A1, A2, A3>> 4110 base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<A1, A2, A3>>
3983 (obj, method, MakeTuple(p1, p2, p3, p4, p5)); 4111 (obj, method, base::MakeTuple(p1, p2, p3, p4, p5));
3984 return MutantFunctor<R, Tuple<A1, A2, A3>>(t); 4112 return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
3985 } 4113 }
3986 4114
3987 template <typename R, typename P1, typename P2, typename P3, typename P4, 4115 template <typename R, typename P1, typename P2, typename P3, typename P4,
3988 typename P5, typename A1, typename A2, typename A3, typename X1, 4116 typename P5, typename A1, typename A2, typename A3, typename X1,
3989 typename X2, typename X3, typename X4, typename X5> 4117 typename X2, typename X3, typename X4, typename X5>
3990 inline MutantFunctor<R, Tuple<A1, A2, A3>> 4118 inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
3991 CreateFunctor(R (*function)(X1, X2, X3, X4, X5, A1, A2, A3), const P1& p1, 4119 CreateFunctor(R (*function)(X1, X2, X3, X4, X5, A1, A2, A3), const P1& p1,
3992 const P2& p2, const P3& p3, const P4& p4, const P5& p5) { 4120 const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
3993 MutantRunner<R, Tuple<A1, A2, A3>>* t = 4121 MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
3994 new MutantFunction<R, R (*)(X1, X2, X3, X4, X5, A1, A2, A3), 4122 new MutantFunction<R, R (*)(X1, X2, X3, X4, X5, A1, A2, A3),
3995 Tuple<P1, P2, P3, P4, P5>, Tuple<A1, A2, A3>> 4123 base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<A1, A2,
3996 (function, MakeTuple(p1, p2, p3, p4, p5)); 4124 A3>>
3997 return MutantFunctor<R, Tuple<A1, A2, A3>>(t); 4125 (function, base::MakeTuple(p1, p2, p3, p4, p5));
4126 return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
3998 } 4127 }
3999 4128
4000 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 4129 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4001 template <typename R, typename T, typename U, typename P1, typename P2, 4130 template <typename R, typename T, typename U, typename P1, typename P2,
4002 typename P3, typename P4, typename P5, typename A1, typename A2, 4131 typename P3, typename P4, typename P5, typename A1, typename A2,
4003 typename A3, typename X1, typename X2, typename X3, typename X4, 4132 typename A3, typename X1, typename X2, typename X3, typename X4,
4004 typename X5> 4133 typename X5>
4005 inline MutantFunctor<R, Tuple<A1, A2, A3>> 4134 inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
4006 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, X5, A1, A2, A3), 4135 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, X5, A1, A2, A3),
4007 const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) { 4136 const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
4008 MutantRunner<R, Tuple<A1, A2, A3>>* t = 4137 MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
4009 new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, X5, A1, A2, A3), 4138 new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, X5, A1, A2, A3),
4010 Tuple<P1, P2, P3, P4, P5>, Tuple<A1, A2, A3>> 4139 base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<A1, A2, A3>>
4011 (obj, method, MakeTuple(p1, p2, p3, p4, p5)); 4140 (obj, method, base::MakeTuple(p1, p2, p3, p4, p5));
4012 return MutantFunctor<R, Tuple<A1, A2, A3>>(t); 4141 return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
4013 } 4142 }
4014 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 4143 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4015 4144
4016 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 4145 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
4017 template <typename R, typename T, typename U, typename P1, typename P2, 4146 template <typename R, typename T, typename U, typename P1, typename P2,
4018 typename P3, typename P4, typename P5, typename A1, typename A2, 4147 typename P3, typename P4, typename P5, typename A1, typename A2,
4019 typename A3, typename X1, typename X2, typename X3, typename X4, 4148 typename A3, typename X1, typename X2, typename X3, typename X4,
4020 typename X5> 4149 typename X5>
4021 inline MutantFunctor<R, Tuple<A1, A2, A3>> 4150 inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
4022 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, A1, A2, A3), 4151 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, A1, A2, A3),
4023 const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) { 4152 const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
4024 MutantRunner<R, Tuple<A1, A2, A3>>* t = 4153 MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
4025 new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, A1, A2, A3), 4154 new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, A1, A2, A3),
4026 Tuple<P1, P2, P3, P4, P5>, Tuple<A1, A2, A3>> 4155 base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<A1, A2, A3>>
4027 (obj, method, MakeTuple(p1, p2, p3, p4, p5)); 4156 (obj, method, base::MakeTuple(p1, p2, p3, p4, p5));
4028 return MutantFunctor<R, Tuple<A1, A2, A3>>(t); 4157 return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
4029 } 4158 }
4030 4159
4031 template <typename R, typename P1, typename P2, typename P3, typename P4, 4160 template <typename R, typename P1, typename P2, typename P3, typename P4,
4032 typename P5, typename A1, typename A2, typename A3, typename X1, 4161 typename P5, typename A1, typename A2, typename A3, typename X1,
4033 typename X2, typename X3, typename X4, typename X5> 4162 typename X2, typename X3, typename X4, typename X5>
4034 inline MutantFunctor<R, Tuple<A1, A2, A3>> 4163 inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
4035 CreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, X5, A1, A2, A3), 4164 CreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, X5, A1, A2, A3),
4036 const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) { 4165 const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
4037 MutantRunner<R, Tuple<A1, A2, A3>>* t = 4166 MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
4038 new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, X5, A1, A2, A3), 4167 new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, X5, A1, A2, A3),
4039 Tuple<P1, P2, P3, P4, P5>, Tuple<A1, A2, A3>> 4168 base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<A1, A2,
4040 (function, MakeTuple(p1, p2, p3, p4, p5)); 4169 A3>>
4041 return MutantFunctor<R, Tuple<A1, A2, A3>>(t); 4170 (function, base::MakeTuple(p1, p2, p3, p4, p5));
4171 return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
4042 } 4172 }
4043 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 4173 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4044 template <typename R, typename T, typename U, typename P1, typename P2, 4174 template <typename R, typename T, typename U, typename P1, typename P2,
4045 typename P3, typename P4, typename P5, typename A1, typename A2, 4175 typename P3, typename P4, typename P5, typename A1, typename A2,
4046 typename A3, typename X1, typename X2, typename X3, typename X4, 4176 typename A3, typename X1, typename X2, typename X3, typename X4,
4047 typename X5> 4177 typename X5>
4048 inline MutantFunctor<R, Tuple<A1, A2, A3>> 4178 inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
4049 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, A1, A2, A3), 4179 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, A1, A2, A3),
4050 const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) { 4180 const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
4051 MutantRunner<R, Tuple<A1, A2, A3>>* t = 4181 MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
4052 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, A1, A2, A3), 4182 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, A1, A2, A3),
4053 Tuple<P1, P2, P3, P4, P5>, Tuple<A1, A2, A3>> 4183 base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<A1, A2, A3>>
4054 (obj, method, MakeTuple(p1, p2, p3, p4, p5)); 4184 (obj, method, base::MakeTuple(p1, p2, p3, p4, p5));
4055 return MutantFunctor<R, Tuple<A1, A2, A3>>(t); 4185 return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
4056 } 4186 }
4057 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 4187 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4058 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 4188 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
4059 4189
4060 // 5 - 4 4190 // 5 - 4
4061 template <typename R, typename T, typename U, typename P1, typename P2, 4191 template <typename R, typename T, typename U, typename P1, typename P2,
4062 typename P3, typename P4, typename P5, typename A1, typename A2, 4192 typename P3, typename P4, typename P5, typename A1, typename A2,
4063 typename A3, typename A4, typename X1, typename X2, typename X3, 4193 typename A3, typename A4, typename X1, typename X2, typename X3,
4064 typename X4, typename X5> 4194 typename X4, typename X5>
4065 inline MutantFunctor<R, Tuple<A1, A2, A3, A4>> 4195 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
4066 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, X5, A1, A2, A3, A4), 4196 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, X5, A1, A2, A3, A4),
4067 const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) { 4197 const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
4068 MutantRunner<R, Tuple<A1, A2, A3, A4>>* t = 4198 MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
4069 new Mutant<R, T, R (U::*)(X1, X2, X3, X4, X5, A1, A2, A3, A4), 4199 new Mutant<R, T, R (U::*)(X1, X2, X3, X4, X5, A1, A2, A3, A4),
4070 Tuple<P1, P2, P3, P4, P5>, Tuple<A1, A2, A3, A4>> 4200 base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<A1, A2, A3, A4>>
4071 (obj, method, MakeTuple(p1, p2, p3, p4, p5)); 4201 (obj, method, base::MakeTuple(p1, p2, p3, p4, p5));
4072 return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t); 4202 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
4073 } 4203 }
4074 4204
4075 template <typename R, typename P1, typename P2, typename P3, typename P4, 4205 template <typename R, typename P1, typename P2, typename P3, typename P4,
4076 typename P5, typename A1, typename A2, typename A3, typename A4, 4206 typename P5, typename A1, typename A2, typename A3, typename A4,
4077 typename X1, typename X2, typename X3, typename X4, typename X5> 4207 typename X1, typename X2, typename X3, typename X4, typename X5>
4078 inline MutantFunctor<R, Tuple<A1, A2, A3, A4>> 4208 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
4079 CreateFunctor(R (*function)(X1, X2, X3, X4, X5, A1, A2, A3, A4), const P1& p1, 4209 CreateFunctor(R (*function)(X1, X2, X3, X4, X5, A1, A2, A3, A4), const P1& p1,
4080 const P2& p2, const P3& p3, const P4& p4, const P5& p5) { 4210 const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
4081 MutantRunner<R, Tuple<A1, A2, A3, A4>>* t = 4211 MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
4082 new MutantFunction<R, R (*)(X1, X2, X3, X4, X5, A1, A2, A3, A4), 4212 new MutantFunction<R, R (*)(X1, X2, X3, X4, X5, A1, A2, A3, A4),
4083 Tuple<P1, P2, P3, P4, P5>, Tuple<A1, A2, A3, A4>> 4213 base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<A1, A2,
4084 (function, MakeTuple(p1, p2, p3, p4, p5)); 4214 A3, A4>>
4085 return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t); 4215 (function, base::MakeTuple(p1, p2, p3, p4, p5));
4216 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
4086 } 4217 }
4087 4218
4088 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 4219 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4089 template <typename R, typename T, typename U, typename P1, typename P2, 4220 template <typename R, typename T, typename U, typename P1, typename P2,
4090 typename P3, typename P4, typename P5, typename A1, typename A2, 4221 typename P3, typename P4, typename P5, typename A1, typename A2,
4091 typename A3, typename A4, typename X1, typename X2, typename X3, 4222 typename A3, typename A4, typename X1, typename X2, typename X3,
4092 typename X4, typename X5> 4223 typename X4, typename X5>
4093 inline MutantFunctor<R, Tuple<A1, A2, A3, A4>> 4224 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
4094 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, X5, A1, A2, A3, A4), 4225 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, X5, A1, A2, A3, A4),
4095 const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) { 4226 const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
4096 MutantRunner<R, Tuple<A1, A2, A3, A4>>* t = 4227 MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
4097 new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, X5, A1, A2, A3, A4 ), 4228 new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, X5, A1, A2, A3, A4 ),
4098 Tuple<P1, P2, P3, P4, P5>, Tuple<A1, A2, A3, A4>> 4229 base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<A1, A2, A3, A4>>
4099 (obj, method, MakeTuple(p1, p2, p3, p4, p5)); 4230 (obj, method, base::MakeTuple(p1, p2, p3, p4, p5));
4100 return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t); 4231 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
4101 } 4232 }
4102 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 4233 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4103 4234
4104 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 4235 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
4105 template <typename R, typename T, typename U, typename P1, typename P2, 4236 template <typename R, typename T, typename U, typename P1, typename P2,
4106 typename P3, typename P4, typename P5, typename A1, typename A2, 4237 typename P3, typename P4, typename P5, typename A1, typename A2,
4107 typename A3, typename A4, typename X1, typename X2, typename X3, 4238 typename A3, typename A4, typename X1, typename X2, typename X3,
4108 typename X4, typename X5> 4239 typename X4, typename X5>
4109 inline MutantFunctor<R, Tuple<A1, A2, A3, A4>> 4240 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
4110 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, A1, A2, A3, 4241 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, A1, A2, A3,
4111 A4), const P1& p1, const P2& p2, const P3& p3, const P4& p4, 4242 A4), const P1& p1, const P2& p2, const P3& p3, const P4& p4,
4112 const P5& p5) { 4243 const P5& p5) {
4113 MutantRunner<R, Tuple<A1, A2, A3, A4>>* t = 4244 MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
4114 new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, A1, A2, A3, A4), 4245 new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, A1, A2, A3, A4),
4115 Tuple<P1, P2, P3, P4, P5>, Tuple<A1, A2, A3, A4>> 4246 base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<A1, A2, A3, A4>>
4116 (obj, method, MakeTuple(p1, p2, p3, p4, p5)); 4247 (obj, method, base::MakeTuple(p1, p2, p3, p4, p5));
4117 return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t); 4248 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
4118 } 4249 }
4119 4250
4120 template <typename R, typename P1, typename P2, typename P3, typename P4, 4251 template <typename R, typename P1, typename P2, typename P3, typename P4,
4121 typename P5, typename A1, typename A2, typename A3, typename A4, 4252 typename P5, typename A1, typename A2, typename A3, typename A4,
4122 typename X1, typename X2, typename X3, typename X4, typename X5> 4253 typename X1, typename X2, typename X3, typename X4, typename X5>
4123 inline MutantFunctor<R, Tuple<A1, A2, A3, A4>> 4254 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
4124 CreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, X5, A1, A2, A3, A4), 4255 CreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, X5, A1, A2, A3, A4),
4125 const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) { 4256 const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
4126 MutantRunner<R, Tuple<A1, A2, A3, A4>>* t = 4257 MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
4127 new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, X5, A1, A2, A3, A4), 4258 new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, X5, A1, A2, A3, A4),
4128 Tuple<P1, P2, P3, P4, P5>, Tuple<A1, A2, A3, A4>> 4259 base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<A1, A2,
4129 (function, MakeTuple(p1, p2, p3, p4, p5)); 4260 A3, A4>>
4130 return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t); 4261 (function, base::MakeTuple(p1, p2, p3, p4, p5));
4262 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
4131 } 4263 }
4132 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 4264 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4133 template <typename R, typename T, typename U, typename P1, typename P2, 4265 template <typename R, typename T, typename U, typename P1, typename P2,
4134 typename P3, typename P4, typename P5, typename A1, typename A2, 4266 typename P3, typename P4, typename P5, typename A1, typename A2,
4135 typename A3, typename A4, typename X1, typename X2, typename X3, 4267 typename A3, typename A4, typename X1, typename X2, typename X3,
4136 typename X4, typename X5> 4268 typename X4, typename X5>
4137 inline MutantFunctor<R, Tuple<A1, A2, A3, A4>> 4269 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
4138 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, A1, A2, A3, 4270 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, A1, A2, A3,
4139 A4), const P1& p1, const P2& p2, const P3& p3, const P4& p4, 4271 A4), const P1& p1, const P2& p2, const P3& p3, const P4& p4,
4140 const P5& p5) { 4272 const P5& p5) {
4141 MutantRunner<R, Tuple<A1, A2, A3, A4>>* t = 4273 MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
4142 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, A1, A2, A3, A4), 4274 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, A1, A2, A3, A4),
4143 Tuple<P1, P2, P3, P4, P5>, Tuple<A1, A2, A3, A4>> 4275 base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<A1, A2, A3, A4>>
4144 (obj, method, MakeTuple(p1, p2, p3, p4, p5)); 4276 (obj, method, base::MakeTuple(p1, p2, p3, p4, p5));
4145 return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t); 4277 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
4146 } 4278 }
4147 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 4279 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4148 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 4280 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
4149 4281
4150 // 5 - 5 4282 // 5 - 5
4151 template <typename R, typename T, typename U, typename P1, typename P2, 4283 template <typename R, typename T, typename U, typename P1, typename P2,
4152 typename P3, typename P4, typename P5, typename A1, typename A2, 4284 typename P3, typename P4, typename P5, typename A1, typename A2,
4153 typename A3, typename A4, typename A5, typename X1, typename X2, 4285 typename A3, typename A4, typename A5, typename X1, typename X2,
4154 typename X3, typename X4, typename X5> 4286 typename X3, typename X4, typename X5>
4155 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>> 4287 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
4156 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, X5, A1, A2, A3, A4, A5), 4288 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, X5, A1, A2, A3, A4, A5),
4157 const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) { 4289 const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
4158 MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t = 4290 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
4159 new Mutant<R, T, R (U::*)(X1, X2, X3, X4, X5, A1, A2, A3, A4, A5), 4291 new Mutant<R, T, R (U::*)(X1, X2, X3, X4, X5, A1, A2, A3, A4, A5),
4160 Tuple<P1, P2, P3, P4, P5>, Tuple<A1, A2, A3, A4, A5>> 4292 base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<A1, A2, A3, A4,
4161 (obj, method, MakeTuple(p1, p2, p3, p4, p5)); 4293 A5>>
4162 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t); 4294 (obj, method, base::MakeTuple(p1, p2, p3, p4, p5));
4295 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
4163 } 4296 }
4164 4297
4165 template <typename R, typename P1, typename P2, typename P3, typename P4, 4298 template <typename R, typename P1, typename P2, typename P3, typename P4,
4166 typename P5, typename A1, typename A2, typename A3, typename A4, 4299 typename P5, typename A1, typename A2, typename A3, typename A4,
4167 typename A5, typename X1, typename X2, typename X3, typename X4, 4300 typename A5, typename X1, typename X2, typename X3, typename X4,
4168 typename X5> 4301 typename X5>
4169 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>> 4302 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
4170 CreateFunctor(R (*function)(X1, X2, X3, X4, X5, A1, A2, A3, A4, A5), 4303 CreateFunctor(R (*function)(X1, X2, X3, X4, X5, A1, A2, A3, A4, A5),
4171 const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) { 4304 const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
4172 MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t = 4305 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
4173 new MutantFunction<R, R (*)(X1, X2, X3, X4, X5, A1, A2, A3, A4, A5), 4306 new MutantFunction<R, R (*)(X1, X2, X3, X4, X5, A1, A2, A3, A4, A5),
4174 Tuple<P1, P2, P3, P4, P5>, Tuple<A1, A2, A3, A4, A5>> 4307 base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<A1, A2,
4175 (function, MakeTuple(p1, p2, p3, p4, p5)); 4308 A3, A4, A5>>
4176 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t); 4309 (function, base::MakeTuple(p1, p2, p3, p4, p5));
4310 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
4177 } 4311 }
4178 4312
4179 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 4313 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4180 template <typename R, typename T, typename U, typename P1, typename P2, 4314 template <typename R, typename T, typename U, typename P1, typename P2,
4181 typename P3, typename P4, typename P5, typename A1, typename A2, 4315 typename P3, typename P4, typename P5, typename A1, typename A2,
4182 typename A3, typename A4, typename A5, typename X1, typename X2, 4316 typename A3, typename A4, typename A5, typename X1, typename X2,
4183 typename X3, typename X4, typename X5> 4317 typename X3, typename X4, typename X5>
4184 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>> 4318 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
4185 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, X5, A1, A2, A3, A4, A5), 4319 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, X5, A1, A2, A3, A4, A5),
4186 const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) { 4320 const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
4187 MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t = 4321 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
4188 new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, X5, A1, A2, A3, A4 , A5), 4322 new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, X5, A1, A2, A3, A4 , A5),
4189 Tuple<P1, P2, P3, P4, P5>, Tuple<A1, A2, A3, A4, A5>> 4323 base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<A1, A2, A3, A4,
4190 (obj, method, MakeTuple(p1, p2, p3, p4, p5)); 4324 A5>>
4191 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t); 4325 (obj, method, base::MakeTuple(p1, p2, p3, p4, p5));
4326 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
4192 } 4327 }
4193 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 4328 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4194 4329
4195 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 4330 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
4196 template <typename R, typename T, typename U, typename P1, typename P2, 4331 template <typename R, typename T, typename U, typename P1, typename P2,
4197 typename P3, typename P4, typename P5, typename A1, typename A2, 4332 typename P3, typename P4, typename P5, typename A1, typename A2,
4198 typename A3, typename A4, typename A5, typename X1, typename X2, 4333 typename A3, typename A4, typename A5, typename X1, typename X2,
4199 typename X3, typename X4, typename X5> 4334 typename X3, typename X4, typename X5>
4200 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>> 4335 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
4201 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, A1, A2, A3, 4336 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, A1, A2, A3,
4202 A4, A5), const P1& p1, const P2& p2, const P3& p3, const P4& p4, 4337 A4, A5), const P1& p1, const P2& p2, const P3& p3, const P4& p4,
4203 const P5& p5) { 4338 const P5& p5) {
4204 MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t = 4339 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
4205 new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, A1, A2, A3, A4, A5 ), 4340 new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, A1, A2, A3, A4,
4206 Tuple<P1, P2, P3, P4, P5>, Tuple<A1, A2, A3, A4, A5>> 4341 A5),
4207 (obj, method, MakeTuple(p1, p2, p3, p4, p5)); 4342 base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<A1, A2, A3, A4,
4208 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t); 4343 A5>>
4344 (obj, method, base::MakeTuple(p1, p2, p3, p4, p5));
4345 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
4209 } 4346 }
4210 4347
4211 template <typename R, typename P1, typename P2, typename P3, typename P4, 4348 template <typename R, typename P1, typename P2, typename P3, typename P4,
4212 typename P5, typename A1, typename A2, typename A3, typename A4, 4349 typename P5, typename A1, typename A2, typename A3, typename A4,
4213 typename A5, typename X1, typename X2, typename X3, typename X4, 4350 typename A5, typename X1, typename X2, typename X3, typename X4,
4214 typename X5> 4351 typename X5>
4215 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>> 4352 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
4216 CreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, X5, A1, A2, A3, A4, A5), 4353 CreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, X5, A1, A2, A3, A4, A5),
4217 const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) { 4354 const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
4218 MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t = 4355 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
4219 new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, X5, A1, A2, A3, A4, A5), 4356 new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, X5, A1, A2, A3, A4,
4220 Tuple<P1, P2, P3, P4, P5>, Tuple<A1, A2, A3, A4, A5>> 4357 A5),
4221 (function, MakeTuple(p1, p2, p3, p4, p5)); 4358 base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<A1, A2,
4222 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t); 4359 A3, A4, A5>>
4360 (function, base::MakeTuple(p1, p2, p3, p4, p5));
4361 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
4223 } 4362 }
4224 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 4363 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4225 template <typename R, typename T, typename U, typename P1, typename P2, 4364 template <typename R, typename T, typename U, typename P1, typename P2,
4226 typename P3, typename P4, typename P5, typename A1, typename A2, 4365 typename P3, typename P4, typename P5, typename A1, typename A2,
4227 typename A3, typename A4, typename A5, typename X1, typename X2, 4366 typename A3, typename A4, typename A5, typename X1, typename X2,
4228 typename X3, typename X4, typename X5> 4367 typename X3, typename X4, typename X5>
4229 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>> 4368 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
4230 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, A1, A2, A3, 4369 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, A1, A2, A3,
4231 A4, A5), const P1& p1, const P2& p2, const P3& p3, const P4& p4, 4370 A4, A5), const P1& p1, const P2& p2, const P3& p3, const P4& p4,
4232 const P5& p5) { 4371 const P5& p5) {
4233 MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t = 4372 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
4234 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, A1, A2, A3, A4, A5), 4373 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, A1, A2, A3, A4,
4235 Tuple<P1, P2, P3, P4, P5>, Tuple<A1, A2, A3, A4, A5>> 4374 A5),
4236 (obj, method, MakeTuple(p1, p2, p3, p4, p5)); 4375 base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<A1, A2, A3, A4,
4237 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t); 4376 A5>>
4377 (obj, method, base::MakeTuple(p1, p2, p3, p4, p5));
4378 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
4238 } 4379 }
4239 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 4380 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4240 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 4381 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
4241 4382
4242 // 5 - 6 4383 // 5 - 6
4243 template <typename R, typename T, typename U, typename P1, typename P2, 4384 template <typename R, typename T, typename U, typename P1, typename P2,
4244 typename P3, typename P4, typename P5, typename A1, typename A2, 4385 typename P3, typename P4, typename P5, typename A1, typename A2,
4245 typename A3, typename A4, typename A5, typename A6, typename X1, 4386 typename A3, typename A4, typename A5, typename A6, typename X1,
4246 typename X2, typename X3, typename X4, typename X5> 4387 typename X2, typename X3, typename X4, typename X5>
4247 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>> 4388 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
4248 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, X5, A1, A2, A3, A4, A5, 4389 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, X5, A1, A2, A3, A4, A5,
4249 A6), const P1& p1, const P2& p2, const P3& p3, const P4& p4, 4390 A6), const P1& p1, const P2& p2, const P3& p3, const P4& p4,
4250 const P5& p5) { 4391 const P5& p5) {
4251 MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t = 4392 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
4252 new Mutant<R, T, R (U::*)(X1, X2, X3, X4, X5, A1, A2, A3, A4, A5, A6), 4393 new Mutant<R, T, R (U::*)(X1, X2, X3, X4, X5, A1, A2, A3, A4, A5, A6),
4253 Tuple<P1, P2, P3, P4, P5>, Tuple<A1, A2, A3, A4, A5, A6>> 4394 base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<A1, A2, A3, A4,
4254 (obj, method, MakeTuple(p1, p2, p3, p4, p5)); 4395 A5, A6>>
4255 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t); 4396 (obj, method, base::MakeTuple(p1, p2, p3, p4, p5));
4397 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
4256 } 4398 }
4257 4399
4258 template <typename R, typename P1, typename P2, typename P3, typename P4, 4400 template <typename R, typename P1, typename P2, typename P3, typename P4,
4259 typename P5, typename A1, typename A2, typename A3, typename A4, 4401 typename P5, typename A1, typename A2, typename A3, typename A4,
4260 typename A5, typename A6, typename X1, typename X2, typename X3, 4402 typename A5, typename A6, typename X1, typename X2, typename X3,
4261 typename X4, typename X5> 4403 typename X4, typename X5>
4262 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>> 4404 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
4263 CreateFunctor(R (*function)(X1, X2, X3, X4, X5, A1, A2, A3, A4, A5, A6), 4405 CreateFunctor(R (*function)(X1, X2, X3, X4, X5, A1, A2, A3, A4, A5, A6),
4264 const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) { 4406 const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
4265 MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t = 4407 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
4266 new MutantFunction<R, R (*)(X1, X2, X3, X4, X5, A1, A2, A3, A4, A5, A6), 4408 new MutantFunction<R, R (*)(X1, X2, X3, X4, X5, A1, A2, A3, A4, A5, A6),
4267 Tuple<P1, P2, P3, P4, P5>, Tuple<A1, A2, A3, A4, A5, A6 >> 4409 base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<A1, A2,
4268 (function, MakeTuple(p1, p2, p3, p4, p5)); 4410 A3, A4, A5, A6>>
4269 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t); 4411 (function, base::MakeTuple(p1, p2, p3, p4, p5));
4412 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
4270 } 4413 }
4271 4414
4272 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 4415 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4273 template <typename R, typename T, typename U, typename P1, typename P2, 4416 template <typename R, typename T, typename U, typename P1, typename P2,
4274 typename P3, typename P4, typename P5, typename A1, typename A2, 4417 typename P3, typename P4, typename P5, typename A1, typename A2,
4275 typename A3, typename A4, typename A5, typename A6, typename X1, 4418 typename A3, typename A4, typename A5, typename A6, typename X1,
4276 typename X2, typename X3, typename X4, typename X5> 4419 typename X2, typename X3, typename X4, typename X5>
4277 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>> 4420 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
4278 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, X5, A1, A2, A3, A4, A5, 4421 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, X5, A1, A2, A3, A4, A5,
4279 A6), const P1& p1, const P2& p2, const P3& p3, const P4& p4, 4422 A6), const P1& p1, const P2& p2, const P3& p3, const P4& p4,
4280 const P5& p5) { 4423 const P5& p5) {
4281 MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t = 4424 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
4282 new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, X5, A1, A2, A3, A4 , A5, A6), 4425 new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, X5, A1, A2, A3, A4 , A5, A6),
4283 Tuple<P1, P2, P3, P4, P5>, Tuple<A1, A2, A3, A4, A5, A6>> 4426 base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<A1, A2, A3, A4,
4284 (obj, method, MakeTuple(p1, p2, p3, p4, p5)); 4427 A5, A6>>
4285 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t); 4428 (obj, method, base::MakeTuple(p1, p2, p3, p4, p5));
4429 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
4286 } 4430 }
4287 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 4431 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4288 4432
4289 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 4433 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
4290 template <typename R, typename T, typename U, typename P1, typename P2, 4434 template <typename R, typename T, typename U, typename P1, typename P2,
4291 typename P3, typename P4, typename P5, typename A1, typename A2, 4435 typename P3, typename P4, typename P5, typename A1, typename A2,
4292 typename A3, typename A4, typename A5, typename A6, typename X1, 4436 typename A3, typename A4, typename A5, typename A6, typename X1,
4293 typename X2, typename X3, typename X4, typename X5> 4437 typename X2, typename X3, typename X4, typename X5>
4294 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>> 4438 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
4295 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, A1, A2, A3, 4439 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, A1, A2, A3,
4296 A4, A5, A6), const P1& p1, const P2& p2, const P3& p3, const P4& p4, 4440 A4, A5, A6), const P1& p1, const P2& p2, const P3& p3, const P4& p4,
4297 const P5& p5) { 4441 const P5& p5) {
4298 MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t = 4442 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
4299 new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, A1, A2, A3, A4, A5 , A6), 4443 new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, A1, A2, A3, A4,
4300 Tuple<P1, P2, P3, P4, P5>, Tuple<A1, A2, A3, A4, A5, A6>> 4444 A5, A6),
4301 (obj, method, MakeTuple(p1, p2, p3, p4, p5)); 4445 base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<A1, A2, A3, A4,
4302 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t); 4446 A5, A6>>
4447 (obj, method, base::MakeTuple(p1, p2, p3, p4, p5));
4448 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
4303 } 4449 }
4304 4450
4305 template <typename R, typename P1, typename P2, typename P3, typename P4, 4451 template <typename R, typename P1, typename P2, typename P3, typename P4,
4306 typename P5, typename A1, typename A2, typename A3, typename A4, 4452 typename P5, typename A1, typename A2, typename A3, typename A4,
4307 typename A5, typename A6, typename X1, typename X2, typename X3, 4453 typename A5, typename A6, typename X1, typename X2, typename X3,
4308 typename X4, typename X5> 4454 typename X4, typename X5>
4309 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>> 4455 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
4310 CreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, X5, A1, A2, A3, A4, A5, 4456 CreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, X5, A1, A2, A3, A4, A5,
4311 A6), const P1& p1, const P2& p2, const P3& p3, const P4& p4, 4457 A6), const P1& p1, const P2& p2, const P3& p3, const P4& p4,
4312 const P5& p5) { 4458 const P5& p5) {
4313 MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t = 4459 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
4314 new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, X5, A1, A2, A3, A4, A5, A6), 4460 new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, X5, A1, A2, A3, A4,
4315 Tuple<P1, P2, P3, P4, P5>, Tuple<A1, A2, A3, A4, A5, A6 >> 4461 A5, A6),
4316 (function, MakeTuple(p1, p2, p3, p4, p5)); 4462 base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<A1, A2,
4317 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t); 4463 A3, A4, A5, A6>>
4464 (function, base::MakeTuple(p1, p2, p3, p4, p5));
4465 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
4318 } 4466 }
4319 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 4467 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4320 template <typename R, typename T, typename U, typename P1, typename P2, 4468 template <typename R, typename T, typename U, typename P1, typename P2,
4321 typename P3, typename P4, typename P5, typename A1, typename A2, 4469 typename P3, typename P4, typename P5, typename A1, typename A2,
4322 typename A3, typename A4, typename A5, typename A6, typename X1, 4470 typename A3, typename A4, typename A5, typename A6, typename X1,
4323 typename X2, typename X3, typename X4, typename X5> 4471 typename X2, typename X3, typename X4, typename X5>
4324 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>> 4472 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
4325 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, A1, A2, A3, 4473 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, A1, A2, A3,
4326 A4, A5, A6), const P1& p1, const P2& p2, const P3& p3, const P4& p4, 4474 A4, A5, A6), const P1& p1, const P2& p2, const P3& p3, const P4& p4,
4327 const P5& p5) { 4475 const P5& p5) {
4328 MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t = 4476 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
4329 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, A1, A2, A3, A4, A5, A6), 4477 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, A1, A2, A3, A4,
4330 Tuple<P1, P2, P3, P4, P5>, Tuple<A1, A2, A3, A4, A5, A6>> 4478 A5, A6),
4331 (obj, method, MakeTuple(p1, p2, p3, p4, p5)); 4479 base::Tuple<P1, P2, P3, P4, P5>, base::Tuple<A1, A2, A3, A4,
4332 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t); 4480 A5, A6>>
4481 (obj, method, base::MakeTuple(p1, p2, p3, p4, p5));
4482 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
4333 } 4483 }
4334 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 4484 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4335 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 4485 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
4336 4486
4337 // 6 - 0 4487 // 6 - 0
4338 template <typename R, typename T, typename U, typename P1, typename P2, 4488 template <typename R, typename T, typename U, typename P1, typename P2,
4339 typename P3, typename P4, typename P5, typename P6, typename X1, 4489 typename P3, typename P4, typename P5, typename P6, typename X1,
4340 typename X2, typename X3, typename X4, typename X5, typename X6> 4490 typename X2, typename X3, typename X4, typename X5, typename X6>
4341 inline MutantFunctor<R, Tuple<>> 4491 inline MutantFunctor<R, base::Tuple<>>
4342 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, X5, X6), const P1& p1, 4492 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, X5, X6), const P1& p1,
4343 const P2& p2, const P3& p3, const P4& p4, const P5& p5, const P6& p6) { 4493 const P2& p2, const P3& p3, const P4& p4, const P5& p5, const P6& p6) {
4344 MutantRunner<R, Tuple<>>* t = 4494 MutantRunner<R, base::Tuple<>>* t =
4345 new Mutant<R, T, R (U::*)(X1, X2, X3, X4, X5, X6), 4495 new Mutant<R, T, R (U::*)(X1, X2, X3, X4, X5, X6),
4346 Tuple<P1, P2, P3, P4, P5, P6>, Tuple<>> 4496 base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<>>
4347 (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6)); 4497 (obj, method, base::MakeTuple(p1, p2, p3, p4, p5, p6));
4348 return MutantFunctor<R, Tuple<>>(t); 4498 return MutantFunctor<R, base::Tuple<>>(t);
4349 } 4499 }
4350 4500
4351 template <typename R, typename P1, typename P2, typename P3, typename P4, 4501 template <typename R, typename P1, typename P2, typename P3, typename P4,
4352 typename P5, typename P6, typename X1, typename X2, typename X3, 4502 typename P5, typename P6, typename X1, typename X2, typename X3,
4353 typename X4, typename X5, typename X6> 4503 typename X4, typename X5, typename X6>
4354 inline MutantFunctor<R, Tuple<>> 4504 inline MutantFunctor<R, base::Tuple<>>
4355 CreateFunctor(R (*function)(X1, X2, X3, X4, X5, X6), const P1& p1, const P2& p2, 4505 CreateFunctor(R (*function)(X1, X2, X3, X4, X5, X6), const P1& p1, const P2& p2,
4356 const P3& p3, const P4& p4, const P5& p5, const P6& p6) { 4506 const P3& p3, const P4& p4, const P5& p5, const P6& p6) {
4357 MutantRunner<R, Tuple<>>* t = 4507 MutantRunner<R, base::Tuple<>>* t =
4358 new MutantFunction<R, R (*)(X1, X2, X3, X4, X5, X6), 4508 new MutantFunction<R, R (*)(X1, X2, X3, X4, X5, X6),
4359 Tuple<P1, P2, P3, P4, P5, P6>, Tuple<>> 4509 base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<>>
4360 (function, MakeTuple(p1, p2, p3, p4, p5, p6)); 4510 (function, base::MakeTuple(p1, p2, p3, p4, p5, p6));
4361 return MutantFunctor<R, Tuple<>>(t); 4511 return MutantFunctor<R, base::Tuple<>>(t);
4362 } 4512 }
4363 4513
4364 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 4514 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4365 template <typename R, typename T, typename U, typename P1, typename P2, 4515 template <typename R, typename T, typename U, typename P1, typename P2,
4366 typename P3, typename P4, typename P5, typename P6, typename X1, 4516 typename P3, typename P4, typename P5, typename P6, typename X1,
4367 typename X2, typename X3, typename X4, typename X5, typename X6> 4517 typename X2, typename X3, typename X4, typename X5, typename X6>
4368 inline MutantFunctor<R, Tuple<>> 4518 inline MutantFunctor<R, base::Tuple<>>
4369 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, X5, X6), const P1& p1, 4519 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, X5, X6), const P1& p1,
4370 const P2& p2, const P3& p3, const P4& p4, const P5& p5, const P6& p6) { 4520 const P2& p2, const P3& p3, const P4& p4, const P5& p5, const P6& p6) {
4371 MutantRunner<R, Tuple<>>* t = 4521 MutantRunner<R, base::Tuple<>>* t =
4372 new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, X5, X6), 4522 new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, X5, X6),
4373 Tuple<P1, P2, P3, P4, P5, P6>, Tuple<>> 4523 base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<>>
4374 (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6)); 4524 (obj, method, base::MakeTuple(p1, p2, p3, p4, p5, p6));
4375 return MutantFunctor<R, Tuple<>>(t); 4525 return MutantFunctor<R, base::Tuple<>>(t);
4376 } 4526 }
4377 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 4527 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4378 4528
4379 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 4529 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
4380 template <typename R, typename T, typename U, typename P1, typename P2, 4530 template <typename R, typename T, typename U, typename P1, typename P2,
4381 typename P3, typename P4, typename P5, typename P6, typename X1, 4531 typename P3, typename P4, typename P5, typename P6, typename X1,
4382 typename X2, typename X3, typename X4, typename X5, typename X6> 4532 typename X2, typename X3, typename X4, typename X5, typename X6>
4383 inline MutantFunctor<R, Tuple<>> 4533 inline MutantFunctor<R, base::Tuple<>>
4384 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, X6), 4534 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, X6),
4385 const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5, 4535 const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
4386 const P6& p6) { 4536 const P6& p6) {
4387 MutantRunner<R, Tuple<>>* t = 4537 MutantRunner<R, base::Tuple<>>* t =
4388 new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, X6), 4538 new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, X6),
4389 Tuple<P1, P2, P3, P4, P5, P6>, Tuple<>> 4539 base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<>>
4390 (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6)); 4540 (obj, method, base::MakeTuple(p1, p2, p3, p4, p5, p6));
4391 return MutantFunctor<R, Tuple<>>(t); 4541 return MutantFunctor<R, base::Tuple<>>(t);
4392 } 4542 }
4393 4543
4394 template <typename R, typename P1, typename P2, typename P3, typename P4, 4544 template <typename R, typename P1, typename P2, typename P3, typename P4,
4395 typename P5, typename P6, typename X1, typename X2, typename X3, 4545 typename P5, typename P6, typename X1, typename X2, typename X3,
4396 typename X4, typename X5, typename X6> 4546 typename X4, typename X5, typename X6>
4397 inline MutantFunctor<R, Tuple<>> 4547 inline MutantFunctor<R, base::Tuple<>>
4398 CreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, X5, X6), const P1& p1, 4548 CreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, X5, X6), const P1& p1,
4399 const P2& p2, const P3& p3, const P4& p4, const P5& p5, const P6& p6) { 4549 const P2& p2, const P3& p3, const P4& p4, const P5& p5, const P6& p6) {
4400 MutantRunner<R, Tuple<>>* t = 4550 MutantRunner<R, base::Tuple<>>* t =
4401 new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, X5, X6), 4551 new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, X5, X6),
4402 Tuple<P1, P2, P3, P4, P5, P6>, Tuple<>> 4552 base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<>>
4403 (function, MakeTuple(p1, p2, p3, p4, p5, p6)); 4553 (function, base::MakeTuple(p1, p2, p3, p4, p5, p6));
4404 return MutantFunctor<R, Tuple<>>(t); 4554 return MutantFunctor<R, base::Tuple<>>(t);
4405 } 4555 }
4406 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 4556 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4407 template <typename R, typename T, typename U, typename P1, typename P2, 4557 template <typename R, typename T, typename U, typename P1, typename P2,
4408 typename P3, typename P4, typename P5, typename P6, typename X1, 4558 typename P3, typename P4, typename P5, typename P6, typename X1,
4409 typename X2, typename X3, typename X4, typename X5, typename X6> 4559 typename X2, typename X3, typename X4, typename X5, typename X6>
4410 inline MutantFunctor<R, Tuple<>> 4560 inline MutantFunctor<R, base::Tuple<>>
4411 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, X6), 4561 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, X6),
4412 const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5, 4562 const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
4413 const P6& p6) { 4563 const P6& p6) {
4414 MutantRunner<R, Tuple<>>* t = 4564 MutantRunner<R, base::Tuple<>>* t =
4415 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, X6), 4565 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, X6),
4416 Tuple<P1, P2, P3, P4, P5, P6>, Tuple<>> 4566 base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<>>
4417 (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6)); 4567 (obj, method, base::MakeTuple(p1, p2, p3, p4, p5, p6));
4418 return MutantFunctor<R, Tuple<>>(t); 4568 return MutantFunctor<R, base::Tuple<>>(t);
4419 } 4569 }
4420 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 4570 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4421 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 4571 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
4422 4572
4423 // 6 - 1 4573 // 6 - 1
4424 template <typename R, typename T, typename U, typename P1, typename P2, 4574 template <typename R, typename T, typename U, typename P1, typename P2,
4425 typename P3, typename P4, typename P5, typename P6, typename A1, 4575 typename P3, typename P4, typename P5, typename P6, typename A1,
4426 typename X1, typename X2, typename X3, typename X4, typename X5, 4576 typename X1, typename X2, typename X3, typename X4, typename X5,
4427 typename X6> 4577 typename X6>
4428 inline MutantFunctor<R, Tuple<A1>> 4578 inline MutantFunctor<R, base::Tuple<A1>>
4429 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, X5, X6, A1), const P1& p1, 4579 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, X5, X6, A1), const P1& p1,
4430 const P2& p2, const P3& p3, const P4& p4, const P5& p5, const P6& p6) { 4580 const P2& p2, const P3& p3, const P4& p4, const P5& p5, const P6& p6) {
4431 MutantRunner<R, Tuple<A1>>* t = 4581 MutantRunner<R, base::Tuple<A1>>* t =
4432 new Mutant<R, T, R (U::*)(X1, X2, X3, X4, X5, X6, A1), 4582 new Mutant<R, T, R (U::*)(X1, X2, X3, X4, X5, X6, A1),
4433 Tuple<P1, P2, P3, P4, P5, P6>, Tuple<A1>> 4583 base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<A1>>
4434 (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6)); 4584 (obj, method, base::MakeTuple(p1, p2, p3, p4, p5, p6));
4435 return MutantFunctor<R, Tuple<A1>>(t); 4585 return MutantFunctor<R, base::Tuple<A1>>(t);
4436 } 4586 }
4437 4587
4438 template <typename R, typename P1, typename P2, typename P3, typename P4, 4588 template <typename R, typename P1, typename P2, typename P3, typename P4,
4439 typename P5, typename P6, typename A1, typename X1, typename X2, 4589 typename P5, typename P6, typename A1, typename X1, typename X2,
4440 typename X3, typename X4, typename X5, typename X6> 4590 typename X3, typename X4, typename X5, typename X6>
4441 inline MutantFunctor<R, Tuple<A1>> 4591 inline MutantFunctor<R, base::Tuple<A1>>
4442 CreateFunctor(R (*function)(X1, X2, X3, X4, X5, X6, A1), const P1& p1, 4592 CreateFunctor(R (*function)(X1, X2, X3, X4, X5, X6, A1), const P1& p1,
4443 const P2& p2, const P3& p3, const P4& p4, const P5& p5, const P6& p6) { 4593 const P2& p2, const P3& p3, const P4& p4, const P5& p5, const P6& p6) {
4444 MutantRunner<R, Tuple<A1>>* t = 4594 MutantRunner<R, base::Tuple<A1>>* t =
4445 new MutantFunction<R, R (*)(X1, X2, X3, X4, X5, X6, A1), 4595 new MutantFunction<R, R (*)(X1, X2, X3, X4, X5, X6, A1),
4446 Tuple<P1, P2, P3, P4, P5, P6>, Tuple<A1>> 4596 base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<A1>>
4447 (function, MakeTuple(p1, p2, p3, p4, p5, p6)); 4597 (function, base::MakeTuple(p1, p2, p3, p4, p5, p6));
4448 return MutantFunctor<R, Tuple<A1>>(t); 4598 return MutantFunctor<R, base::Tuple<A1>>(t);
4449 } 4599 }
4450 4600
4451 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 4601 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4452 template <typename R, typename T, typename U, typename P1, typename P2, 4602 template <typename R, typename T, typename U, typename P1, typename P2,
4453 typename P3, typename P4, typename P5, typename P6, typename A1, 4603 typename P3, typename P4, typename P5, typename P6, typename A1,
4454 typename X1, typename X2, typename X3, typename X4, typename X5, 4604 typename X1, typename X2, typename X3, typename X4, typename X5,
4455 typename X6> 4605 typename X6>
4456 inline MutantFunctor<R, Tuple<A1>> 4606 inline MutantFunctor<R, base::Tuple<A1>>
4457 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, X5, X6, A1), const P1& p1, 4607 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, X5, X6, A1), const P1& p1,
4458 const P2& p2, const P3& p3, const P4& p4, const P5& p5, const P6& p6) { 4608 const P2& p2, const P3& p3, const P4& p4, const P5& p5, const P6& p6) {
4459 MutantRunner<R, Tuple<A1>>* t = 4609 MutantRunner<R, base::Tuple<A1>>* t =
4460 new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, X5, X6, A1), 4610 new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, X5, X6, A1),
4461 Tuple<P1, P2, P3, P4, P5, P6>, Tuple<A1>> 4611 base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<A1>>
4462 (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6)); 4612 (obj, method, base::MakeTuple(p1, p2, p3, p4, p5, p6));
4463 return MutantFunctor<R, Tuple<A1>>(t); 4613 return MutantFunctor<R, base::Tuple<A1>>(t);
4464 } 4614 }
4465 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 4615 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4466 4616
4467 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 4617 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
4468 template <typename R, typename T, typename U, typename P1, typename P2, 4618 template <typename R, typename T, typename U, typename P1, typename P2,
4469 typename P3, typename P4, typename P5, typename P6, typename A1, 4619 typename P3, typename P4, typename P5, typename P6, typename A1,
4470 typename X1, typename X2, typename X3, typename X4, typename X5, 4620 typename X1, typename X2, typename X3, typename X4, typename X5,
4471 typename X6> 4621 typename X6>
4472 inline MutantFunctor<R, Tuple<A1>> 4622 inline MutantFunctor<R, base::Tuple<A1>>
4473 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, X6, A1), 4623 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, X6, A1),
4474 const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5, 4624 const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
4475 const P6& p6) { 4625 const P6& p6) {
4476 MutantRunner<R, Tuple<A1>>* t = 4626 MutantRunner<R, base::Tuple<A1>>* t =
4477 new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, X6, A1), 4627 new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, X6, A1),
4478 Tuple<P1, P2, P3, P4, P5, P6>, Tuple<A1>> 4628 base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<A1>>
4479 (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6)); 4629 (obj, method, base::MakeTuple(p1, p2, p3, p4, p5, p6));
4480 return MutantFunctor<R, Tuple<A1>>(t); 4630 return MutantFunctor<R, base::Tuple<A1>>(t);
4481 } 4631 }
4482 4632
4483 template <typename R, typename P1, typename P2, typename P3, typename P4, 4633 template <typename R, typename P1, typename P2, typename P3, typename P4,
4484 typename P5, typename P6, typename A1, typename X1, typename X2, 4634 typename P5, typename P6, typename A1, typename X1, typename X2,
4485 typename X3, typename X4, typename X5, typename X6> 4635 typename X3, typename X4, typename X5, typename X6>
4486 inline MutantFunctor<R, Tuple<A1>> 4636 inline MutantFunctor<R, base::Tuple<A1>>
4487 CreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, X5, X6, A1), const P1& p1, 4637 CreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, X5, X6, A1), const P1& p1,
4488 const P2& p2, const P3& p3, const P4& p4, const P5& p5, const P6& p6) { 4638 const P2& p2, const P3& p3, const P4& p4, const P5& p5, const P6& p6) {
4489 MutantRunner<R, Tuple<A1>>* t = 4639 MutantRunner<R, base::Tuple<A1>>* t =
4490 new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, X5, X6, A1), 4640 new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, X5, X6, A1),
4491 Tuple<P1, P2, P3, P4, P5, P6>, Tuple<A1>> 4641 base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<A1>>
4492 (function, MakeTuple(p1, p2, p3, p4, p5, p6)); 4642 (function, base::MakeTuple(p1, p2, p3, p4, p5, p6));
4493 return MutantFunctor<R, Tuple<A1>>(t); 4643 return MutantFunctor<R, base::Tuple<A1>>(t);
4494 } 4644 }
4495 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 4645 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4496 template <typename R, typename T, typename U, typename P1, typename P2, 4646 template <typename R, typename T, typename U, typename P1, typename P2,
4497 typename P3, typename P4, typename P5, typename P6, typename A1, 4647 typename P3, typename P4, typename P5, typename P6, typename A1,
4498 typename X1, typename X2, typename X3, typename X4, typename X5, 4648 typename X1, typename X2, typename X3, typename X4, typename X5,
4499 typename X6> 4649 typename X6>
4500 inline MutantFunctor<R, Tuple<A1>> 4650 inline MutantFunctor<R, base::Tuple<A1>>
4501 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, X6, A1), 4651 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, X6, A1),
4502 const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5, 4652 const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
4503 const P6& p6) { 4653 const P6& p6) {
4504 MutantRunner<R, Tuple<A1>>* t = 4654 MutantRunner<R, base::Tuple<A1>>* t =
4505 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, X6, A1), 4655 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, X6, A1),
4506 Tuple<P1, P2, P3, P4, P5, P6>, Tuple<A1>> 4656 base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<A1>>
4507 (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6)); 4657 (obj, method, base::MakeTuple(p1, p2, p3, p4, p5, p6));
4508 return MutantFunctor<R, Tuple<A1>>(t); 4658 return MutantFunctor<R, base::Tuple<A1>>(t);
4509 } 4659 }
4510 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 4660 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4511 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 4661 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
4512 4662
4513 // 6 - 2 4663 // 6 - 2
4514 template <typename R, typename T, typename U, typename P1, typename P2, 4664 template <typename R, typename T, typename U, typename P1, typename P2,
4515 typename P3, typename P4, typename P5, typename P6, typename A1, 4665 typename P3, typename P4, typename P5, typename P6, typename A1,
4516 typename A2, typename X1, typename X2, typename X3, typename X4, 4666 typename A2, typename X1, typename X2, typename X3, typename X4,
4517 typename X5, typename X6> 4667 typename X5, typename X6>
4518 inline MutantFunctor<R, Tuple<A1, A2>> 4668 inline MutantFunctor<R, base::Tuple<A1, A2>>
4519 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, X5, X6, A1, A2), 4669 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, X5, X6, A1, A2),
4520 const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5, 4670 const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
4521 const P6& p6) { 4671 const P6& p6) {
4522 MutantRunner<R, Tuple<A1, A2>>* t = 4672 MutantRunner<R, base::Tuple<A1, A2>>* t =
4523 new Mutant<R, T, R (U::*)(X1, X2, X3, X4, X5, X6, A1, A2), 4673 new Mutant<R, T, R (U::*)(X1, X2, X3, X4, X5, X6, A1, A2),
4524 Tuple<P1, P2, P3, P4, P5, P6>, Tuple<A1, A2>> 4674 base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<A1, A2>>
4525 (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6)); 4675 (obj, method, base::MakeTuple(p1, p2, p3, p4, p5, p6));
4526 return MutantFunctor<R, Tuple<A1, A2>>(t); 4676 return MutantFunctor<R, base::Tuple<A1, A2>>(t);
4527 } 4677 }
4528 4678
4529 template <typename R, typename P1, typename P2, typename P3, typename P4, 4679 template <typename R, typename P1, typename P2, typename P3, typename P4,
4530 typename P5, typename P6, typename A1, typename A2, typename X1, 4680 typename P5, typename P6, typename A1, typename A2, typename X1,
4531 typename X2, typename X3, typename X4, typename X5, typename X6> 4681 typename X2, typename X3, typename X4, typename X5, typename X6>
4532 inline MutantFunctor<R, Tuple<A1, A2>> 4682 inline MutantFunctor<R, base::Tuple<A1, A2>>
4533 CreateFunctor(R (*function)(X1, X2, X3, X4, X5, X6, A1, A2), const P1& p1, 4683 CreateFunctor(R (*function)(X1, X2, X3, X4, X5, X6, A1, A2), const P1& p1,
4534 const P2& p2, const P3& p3, const P4& p4, const P5& p5, const P6& p6) { 4684 const P2& p2, const P3& p3, const P4& p4, const P5& p5, const P6& p6) {
4535 MutantRunner<R, Tuple<A1, A2>>* t = 4685 MutantRunner<R, base::Tuple<A1, A2>>* t =
4536 new MutantFunction<R, R (*)(X1, X2, X3, X4, X5, X6, A1, A2), 4686 new MutantFunction<R, R (*)(X1, X2, X3, X4, X5, X6, A1, A2),
4537 Tuple<P1, P2, P3, P4, P5, P6>, Tuple<A1, A2>> 4687 base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<A1,
4538 (function, MakeTuple(p1, p2, p3, p4, p5, p6)); 4688 A2>>
4539 return MutantFunctor<R, Tuple<A1, A2>>(t); 4689 (function, base::MakeTuple(p1, p2, p3, p4, p5, p6));
4690 return MutantFunctor<R, base::Tuple<A1, A2>>(t);
4540 } 4691 }
4541 4692
4542 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 4693 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4543 template <typename R, typename T, typename U, typename P1, typename P2, 4694 template <typename R, typename T, typename U, typename P1, typename P2,
4544 typename P3, typename P4, typename P5, typename P6, typename A1, 4695 typename P3, typename P4, typename P5, typename P6, typename A1,
4545 typename A2, typename X1, typename X2, typename X3, typename X4, 4696 typename A2, typename X1, typename X2, typename X3, typename X4,
4546 typename X5, typename X6> 4697 typename X5, typename X6>
4547 inline MutantFunctor<R, Tuple<A1, A2>> 4698 inline MutantFunctor<R, base::Tuple<A1, A2>>
4548 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, X5, X6, A1, A2), 4699 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, X5, X6, A1, A2),
4549 const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5, 4700 const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
4550 const P6& p6) { 4701 const P6& p6) {
4551 MutantRunner<R, Tuple<A1, A2>>* t = 4702 MutantRunner<R, base::Tuple<A1, A2>>* t =
4552 new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, X5, X6, A1, A2), 4703 new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, X5, X6, A1, A2),
4553 Tuple<P1, P2, P3, P4, P5, P6>, Tuple<A1, A2>> 4704 base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<A1, A2>>
4554 (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6)); 4705 (obj, method, base::MakeTuple(p1, p2, p3, p4, p5, p6));
4555 return MutantFunctor<R, Tuple<A1, A2>>(t); 4706 return MutantFunctor<R, base::Tuple<A1, A2>>(t);
4556 } 4707 }
4557 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 4708 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4558 4709
4559 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 4710 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
4560 template <typename R, typename T, typename U, typename P1, typename P2, 4711 template <typename R, typename T, typename U, typename P1, typename P2,
4561 typename P3, typename P4, typename P5, typename P6, typename A1, 4712 typename P3, typename P4, typename P5, typename P6, typename A1,
4562 typename A2, typename X1, typename X2, typename X3, typename X4, 4713 typename A2, typename X1, typename X2, typename X3, typename X4,
4563 typename X5, typename X6> 4714 typename X5, typename X6>
4564 inline MutantFunctor<R, Tuple<A1, A2>> 4715 inline MutantFunctor<R, base::Tuple<A1, A2>>
4565 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, X6, A1, A2), 4716 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, X6, A1, A2),
4566 const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5, 4717 const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
4567 const P6& p6) { 4718 const P6& p6) {
4568 MutantRunner<R, Tuple<A1, A2>>* t = 4719 MutantRunner<R, base::Tuple<A1, A2>>* t =
4569 new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, X6, A1, A2), 4720 new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, X6, A1, A2),
4570 Tuple<P1, P2, P3, P4, P5, P6>, Tuple<A1, A2>> 4721 base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<A1, A2>>
4571 (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6)); 4722 (obj, method, base::MakeTuple(p1, p2, p3, p4, p5, p6));
4572 return MutantFunctor<R, Tuple<A1, A2>>(t); 4723 return MutantFunctor<R, base::Tuple<A1, A2>>(t);
4573 } 4724 }
4574 4725
4575 template <typename R, typename P1, typename P2, typename P3, typename P4, 4726 template <typename R, typename P1, typename P2, typename P3, typename P4,
4576 typename P5, typename P6, typename A1, typename A2, typename X1, 4727 typename P5, typename P6, typename A1, typename A2, typename X1,
4577 typename X2, typename X3, typename X4, typename X5, typename X6> 4728 typename X2, typename X3, typename X4, typename X5, typename X6>
4578 inline MutantFunctor<R, Tuple<A1, A2>> 4729 inline MutantFunctor<R, base::Tuple<A1, A2>>
4579 CreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, X5, X6, A1, A2), 4730 CreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, X5, X6, A1, A2),
4580 const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5, 4731 const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
4581 const P6& p6) { 4732 const P6& p6) {
4582 MutantRunner<R, Tuple<A1, A2>>* t = 4733 MutantRunner<R, base::Tuple<A1, A2>>* t =
4583 new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, X5, X6, A1, A2), 4734 new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, X5, X6, A1, A2),
4584 Tuple<P1, P2, P3, P4, P5, P6>, Tuple<A1, A2>> 4735 base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<A1,
4585 (function, MakeTuple(p1, p2, p3, p4, p5, p6)); 4736 A2>>
4586 return MutantFunctor<R, Tuple<A1, A2>>(t); 4737 (function, base::MakeTuple(p1, p2, p3, p4, p5, p6));
4738 return MutantFunctor<R, base::Tuple<A1, A2>>(t);
4587 } 4739 }
4588 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 4740 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4589 template <typename R, typename T, typename U, typename P1, typename P2, 4741 template <typename R, typename T, typename U, typename P1, typename P2,
4590 typename P3, typename P4, typename P5, typename P6, typename A1, 4742 typename P3, typename P4, typename P5, typename P6, typename A1,
4591 typename A2, typename X1, typename X2, typename X3, typename X4, 4743 typename A2, typename X1, typename X2, typename X3, typename X4,
4592 typename X5, typename X6> 4744 typename X5, typename X6>
4593 inline MutantFunctor<R, Tuple<A1, A2>> 4745 inline MutantFunctor<R, base::Tuple<A1, A2>>
4594 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, X6, A1, A2), 4746 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, X6, A1, A2),
4595 const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5, 4747 const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
4596 const P6& p6) { 4748 const P6& p6) {
4597 MutantRunner<R, Tuple<A1, A2>>* t = 4749 MutantRunner<R, base::Tuple<A1, A2>>* t =
4598 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, X6, A1, A2), 4750 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, X6, A1, A2),
4599 Tuple<P1, P2, P3, P4, P5, P6>, Tuple<A1, A2>> 4751 base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<A1, A2>>
4600 (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6)); 4752 (obj, method, base::MakeTuple(p1, p2, p3, p4, p5, p6));
4601 return MutantFunctor<R, Tuple<A1, A2>>(t); 4753 return MutantFunctor<R, base::Tuple<A1, A2>>(t);
4602 } 4754 }
4603 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 4755 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4604 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 4756 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
4605 4757
4606 // 6 - 3 4758 // 6 - 3
4607 template <typename R, typename T, typename U, typename P1, typename P2, 4759 template <typename R, typename T, typename U, typename P1, typename P2,
4608 typename P3, typename P4, typename P5, typename P6, typename A1, 4760 typename P3, typename P4, typename P5, typename P6, typename A1,
4609 typename A2, typename A3, typename X1, typename X2, typename X3, 4761 typename A2, typename A3, typename X1, typename X2, typename X3,
4610 typename X4, typename X5, typename X6> 4762 typename X4, typename X5, typename X6>
4611 inline MutantFunctor<R, Tuple<A1, A2, A3>> 4763 inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
4612 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, X5, X6, A1, A2, A3), 4764 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, X5, X6, A1, A2, A3),
4613 const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5, 4765 const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
4614 const P6& p6) { 4766 const P6& p6) {
4615 MutantRunner<R, Tuple<A1, A2, A3>>* t = 4767 MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
4616 new Mutant<R, T, R (U::*)(X1, X2, X3, X4, X5, X6, A1, A2, A3), 4768 new Mutant<R, T, R (U::*)(X1, X2, X3, X4, X5, X6, A1, A2, A3),
4617 Tuple<P1, P2, P3, P4, P5, P6>, Tuple<A1, A2, A3>> 4769 base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<A1, A2, A3>>
4618 (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6)); 4770 (obj, method, base::MakeTuple(p1, p2, p3, p4, p5, p6));
4619 return MutantFunctor<R, Tuple<A1, A2, A3>>(t); 4771 return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
4620 } 4772 }
4621 4773
4622 template <typename R, typename P1, typename P2, typename P3, typename P4, 4774 template <typename R, typename P1, typename P2, typename P3, typename P4,
4623 typename P5, typename P6, typename A1, typename A2, typename A3, 4775 typename P5, typename P6, typename A1, typename A2, typename A3,
4624 typename X1, typename X2, typename X3, typename X4, typename X5, 4776 typename X1, typename X2, typename X3, typename X4, typename X5,
4625 typename X6> 4777 typename X6>
4626 inline MutantFunctor<R, Tuple<A1, A2, A3>> 4778 inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
4627 CreateFunctor(R (*function)(X1, X2, X3, X4, X5, X6, A1, A2, A3), const P1& p1, 4779 CreateFunctor(R (*function)(X1, X2, X3, X4, X5, X6, A1, A2, A3), const P1& p1,
4628 const P2& p2, const P3& p3, const P4& p4, const P5& p5, const P6& p6) { 4780 const P2& p2, const P3& p3, const P4& p4, const P5& p5, const P6& p6) {
4629 MutantRunner<R, Tuple<A1, A2, A3>>* t = 4781 MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
4630 new MutantFunction<R, R (*)(X1, X2, X3, X4, X5, X6, A1, A2, A3), 4782 new MutantFunction<R, R (*)(X1, X2, X3, X4, X5, X6, A1, A2, A3),
4631 Tuple<P1, P2, P3, P4, P5, P6>, Tuple<A1, A2, A3>> 4783 base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<A1,
4632 (function, MakeTuple(p1, p2, p3, p4, p5, p6)); 4784 A2, A3>>
4633 return MutantFunctor<R, Tuple<A1, A2, A3>>(t); 4785 (function, base::MakeTuple(p1, p2, p3, p4, p5, p6));
4786 return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
4634 } 4787 }
4635 4788
4636 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 4789 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4637 template <typename R, typename T, typename U, typename P1, typename P2, 4790 template <typename R, typename T, typename U, typename P1, typename P2,
4638 typename P3, typename P4, typename P5, typename P6, typename A1, 4791 typename P3, typename P4, typename P5, typename P6, typename A1,
4639 typename A2, typename A3, typename X1, typename X2, typename X3, 4792 typename A2, typename A3, typename X1, typename X2, typename X3,
4640 typename X4, typename X5, typename X6> 4793 typename X4, typename X5, typename X6>
4641 inline MutantFunctor<R, Tuple<A1, A2, A3>> 4794 inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
4642 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, X5, X6, A1, A2, A3), 4795 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, X5, X6, A1, A2, A3),
4643 const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5, 4796 const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
4644 const P6& p6) { 4797 const P6& p6) {
4645 MutantRunner<R, Tuple<A1, A2, A3>>* t = 4798 MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
4646 new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, X5, X6, A1, A2, A3 ), 4799 new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, X5, X6, A1, A2, A3 ),
4647 Tuple<P1, P2, P3, P4, P5, P6>, Tuple<A1, A2, A3>> 4800 base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<A1, A2, A3>>
4648 (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6)); 4801 (obj, method, base::MakeTuple(p1, p2, p3, p4, p5, p6));
4649 return MutantFunctor<R, Tuple<A1, A2, A3>>(t); 4802 return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
4650 } 4803 }
4651 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 4804 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4652 4805
4653 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 4806 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
4654 template <typename R, typename T, typename U, typename P1, typename P2, 4807 template <typename R, typename T, typename U, typename P1, typename P2,
4655 typename P3, typename P4, typename P5, typename P6, typename A1, 4808 typename P3, typename P4, typename P5, typename P6, typename A1,
4656 typename A2, typename A3, typename X1, typename X2, typename X3, 4809 typename A2, typename A3, typename X1, typename X2, typename X3,
4657 typename X4, typename X5, typename X6> 4810 typename X4, typename X5, typename X6>
4658 inline MutantFunctor<R, Tuple<A1, A2, A3>> 4811 inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
4659 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, X6, A1, A2, 4812 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, X6, A1, A2,
4660 A3), const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5, 4813 A3), const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
4661 const P6& p6) { 4814 const P6& p6) {
4662 MutantRunner<R, Tuple<A1, A2, A3>>* t = 4815 MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
4663 new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, X6, A1, A2, A3), 4816 new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, X6, A1, A2, A3),
4664 Tuple<P1, P2, P3, P4, P5, P6>, Tuple<A1, A2, A3>> 4817 base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<A1, A2, A3>>
4665 (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6)); 4818 (obj, method, base::MakeTuple(p1, p2, p3, p4, p5, p6));
4666 return MutantFunctor<R, Tuple<A1, A2, A3>>(t); 4819 return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
4667 } 4820 }
4668 4821
4669 template <typename R, typename P1, typename P2, typename P3, typename P4, 4822 template <typename R, typename P1, typename P2, typename P3, typename P4,
4670 typename P5, typename P6, typename A1, typename A2, typename A3, 4823 typename P5, typename P6, typename A1, typename A2, typename A3,
4671 typename X1, typename X2, typename X3, typename X4, typename X5, 4824 typename X1, typename X2, typename X3, typename X4, typename X5,
4672 typename X6> 4825 typename X6>
4673 inline MutantFunctor<R, Tuple<A1, A2, A3>> 4826 inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
4674 CreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, X5, X6, A1, A2, A3), 4827 CreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, X5, X6, A1, A2, A3),
4675 const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5, 4828 const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
4676 const P6& p6) { 4829 const P6& p6) {
4677 MutantRunner<R, Tuple<A1, A2, A3>>* t = 4830 MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
4678 new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, X5, X6, A1, A2, A3), 4831 new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, X5, X6, A1, A2, A3),
4679 Tuple<P1, P2, P3, P4, P5, P6>, Tuple<A1, A2, A3>> 4832 base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<A1,
4680 (function, MakeTuple(p1, p2, p3, p4, p5, p6)); 4833 A2, A3>>
4681 return MutantFunctor<R, Tuple<A1, A2, A3>>(t); 4834 (function, base::MakeTuple(p1, p2, p3, p4, p5, p6));
4835 return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
4682 } 4836 }
4683 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 4837 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4684 template <typename R, typename T, typename U, typename P1, typename P2, 4838 template <typename R, typename T, typename U, typename P1, typename P2,
4685 typename P3, typename P4, typename P5, typename P6, typename A1, 4839 typename P3, typename P4, typename P5, typename P6, typename A1,
4686 typename A2, typename A3, typename X1, typename X2, typename X3, 4840 typename A2, typename A3, typename X1, typename X2, typename X3,
4687 typename X4, typename X5, typename X6> 4841 typename X4, typename X5, typename X6>
4688 inline MutantFunctor<R, Tuple<A1, A2, A3>> 4842 inline MutantFunctor<R, base::Tuple<A1, A2, A3>>
4689 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, X6, A1, A2, 4843 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, X6, A1, A2,
4690 A3), const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5, 4844 A3), const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
4691 const P6& p6) { 4845 const P6& p6) {
4692 MutantRunner<R, Tuple<A1, A2, A3>>* t = 4846 MutantRunner<R, base::Tuple<A1, A2, A3>>* t =
4693 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, X6, A1, A2, A3), 4847 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, X6, A1, A2, A3),
4694 Tuple<P1, P2, P3, P4, P5, P6>, Tuple<A1, A2, A3>> 4848 base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<A1, A2, A3>>
4695 (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6)); 4849 (obj, method, base::MakeTuple(p1, p2, p3, p4, p5, p6));
4696 return MutantFunctor<R, Tuple<A1, A2, A3>>(t); 4850 return MutantFunctor<R, base::Tuple<A1, A2, A3>>(t);
4697 } 4851 }
4698 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 4852 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4699 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 4853 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
4700 4854
4701 // 6 - 4 4855 // 6 - 4
4702 template <typename R, typename T, typename U, typename P1, typename P2, 4856 template <typename R, typename T, typename U, typename P1, typename P2,
4703 typename P3, typename P4, typename P5, typename P6, typename A1, 4857 typename P3, typename P4, typename P5, typename P6, typename A1,
4704 typename A2, typename A3, typename A4, typename X1, typename X2, 4858 typename A2, typename A3, typename A4, typename X1, typename X2,
4705 typename X3, typename X4, typename X5, typename X6> 4859 typename X3, typename X4, typename X5, typename X6>
4706 inline MutantFunctor<R, Tuple<A1, A2, A3, A4>> 4860 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
4707 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4), 4861 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4),
4708 const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5, 4862 const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
4709 const P6& p6) { 4863 const P6& p6) {
4710 MutantRunner<R, Tuple<A1, A2, A3, A4>>* t = 4864 MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
4711 new Mutant<R, T, R (U::*)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4), 4865 new Mutant<R, T, R (U::*)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4),
4712 Tuple<P1, P2, P3, P4, P5, P6>, Tuple<A1, A2, A3, A4>> 4866 base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<A1, A2, A3,
4713 (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6)); 4867 A4>>
4714 return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t); 4868 (obj, method, base::MakeTuple(p1, p2, p3, p4, p5, p6));
4869 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
4715 } 4870 }
4716 4871
4717 template <typename R, typename P1, typename P2, typename P3, typename P4, 4872 template <typename R, typename P1, typename P2, typename P3, typename P4,
4718 typename P5, typename P6, typename A1, typename A2, typename A3, 4873 typename P5, typename P6, typename A1, typename A2, typename A3,
4719 typename A4, typename X1, typename X2, typename X3, typename X4, 4874 typename A4, typename X1, typename X2, typename X3, typename X4,
4720 typename X5, typename X6> 4875 typename X5, typename X6>
4721 inline MutantFunctor<R, Tuple<A1, A2, A3, A4>> 4876 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
4722 CreateFunctor(R (*function)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4), 4877 CreateFunctor(R (*function)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4),
4723 const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5, 4878 const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
4724 const P6& p6) { 4879 const P6& p6) {
4725 MutantRunner<R, Tuple<A1, A2, A3, A4>>* t = 4880 MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
4726 new MutantFunction<R, R (*)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4), 4881 new MutantFunction<R, R (*)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4),
4727 Tuple<P1, P2, P3, P4, P5, P6>, Tuple<A1, A2, A3, A4>> 4882 base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<A1,
4728 (function, MakeTuple(p1, p2, p3, p4, p5, p6)); 4883 A2, A3, A4>>
4729 return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t); 4884 (function, base::MakeTuple(p1, p2, p3, p4, p5, p6));
4885 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
4730 } 4886 }
4731 4887
4732 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 4888 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4733 template <typename R, typename T, typename U, typename P1, typename P2, 4889 template <typename R, typename T, typename U, typename P1, typename P2,
4734 typename P3, typename P4, typename P5, typename P6, typename A1, 4890 typename P3, typename P4, typename P5, typename P6, typename A1,
4735 typename A2, typename A3, typename A4, typename X1, typename X2, 4891 typename A2, typename A3, typename A4, typename X1, typename X2,
4736 typename X3, typename X4, typename X5, typename X6> 4892 typename X3, typename X4, typename X5, typename X6>
4737 inline MutantFunctor<R, Tuple<A1, A2, A3, A4>> 4893 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
4738 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4), 4894 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4),
4739 const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5, 4895 const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
4740 const P6& p6) { 4896 const P6& p6) {
4741 MutantRunner<R, Tuple<A1, A2, A3, A4>>* t = 4897 MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
4742 new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, X5, X6, A1, A2, A3 , A4), 4898 new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, X5, X6, A1, A2, A3 , A4),
4743 Tuple<P1, P2, P3, P4, P5, P6>, Tuple<A1, A2, A3, A4>> 4899 base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<A1, A2, A3,
4744 (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6)); 4900 A4>>
4745 return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t); 4901 (obj, method, base::MakeTuple(p1, p2, p3, p4, p5, p6));
4902 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
4746 } 4903 }
4747 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 4904 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4748 4905
4749 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 4906 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
4750 template <typename R, typename T, typename U, typename P1, typename P2, 4907 template <typename R, typename T, typename U, typename P1, typename P2,
4751 typename P3, typename P4, typename P5, typename P6, typename A1, 4908 typename P3, typename P4, typename P5, typename P6, typename A1,
4752 typename A2, typename A3, typename A4, typename X1, typename X2, 4909 typename A2, typename A3, typename A4, typename X1, typename X2,
4753 typename X3, typename X4, typename X5, typename X6> 4910 typename X3, typename X4, typename X5, typename X6>
4754 inline MutantFunctor<R, Tuple<A1, A2, A3, A4>> 4911 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
4755 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, X6, A1, A2, 4912 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, X6, A1, A2,
4756 A3, A4), const P1& p1, const P2& p2, const P3& p3, const P4& p4, 4913 A3, A4), const P1& p1, const P2& p2, const P3& p3, const P4& p4,
4757 const P5& p5, const P6& p6) { 4914 const P5& p5, const P6& p6) {
4758 MutantRunner<R, Tuple<A1, A2, A3, A4>>* t = 4915 MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
4759 new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4 ), 4916 new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, X6, A1, A2, A3,
4760 Tuple<P1, P2, P3, P4, P5, P6>, Tuple<A1, A2, A3, A4>> 4917 A4),
4761 (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6)); 4918 base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<A1, A2, A3,
4762 return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t); 4919 A4>>
4920 (obj, method, base::MakeTuple(p1, p2, p3, p4, p5, p6));
4921 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
4763 } 4922 }
4764 4923
4765 template <typename R, typename P1, typename P2, typename P3, typename P4, 4924 template <typename R, typename P1, typename P2, typename P3, typename P4,
4766 typename P5, typename P6, typename A1, typename A2, typename A3, 4925 typename P5, typename P6, typename A1, typename A2, typename A3,
4767 typename A4, typename X1, typename X2, typename X3, typename X4, 4926 typename A4, typename X1, typename X2, typename X3, typename X4,
4768 typename X5, typename X6> 4927 typename X5, typename X6>
4769 inline MutantFunctor<R, Tuple<A1, A2, A3, A4>> 4928 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
4770 CreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4), 4929 CreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4),
4771 const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5, 4930 const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
4772 const P6& p6) { 4931 const P6& p6) {
4773 MutantRunner<R, Tuple<A1, A2, A3, A4>>* t = 4932 MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
4774 new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4), 4933 new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, X5, X6, A1, A2, A3,
4775 Tuple<P1, P2, P3, P4, P5, P6>, Tuple<A1, A2, A3, A4>> 4934 A4),
4776 (function, MakeTuple(p1, p2, p3, p4, p5, p6)); 4935 base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<A1,
4777 return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t); 4936 A2, A3, A4>>
4937 (function, base::MakeTuple(p1, p2, p3, p4, p5, p6));
4938 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
4778 } 4939 }
4779 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 4940 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4780 template <typename R, typename T, typename U, typename P1, typename P2, 4941 template <typename R, typename T, typename U, typename P1, typename P2,
4781 typename P3, typename P4, typename P5, typename P6, typename A1, 4942 typename P3, typename P4, typename P5, typename P6, typename A1,
4782 typename A2, typename A3, typename A4, typename X1, typename X2, 4943 typename A2, typename A3, typename A4, typename X1, typename X2,
4783 typename X3, typename X4, typename X5, typename X6> 4944 typename X3, typename X4, typename X5, typename X6>
4784 inline MutantFunctor<R, Tuple<A1, A2, A3, A4>> 4945 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>
4785 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, X6, A1, A2, 4946 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, X6, A1, A2,
4786 A3, A4), const P1& p1, const P2& p2, const P3& p3, const P4& p4, 4947 A3, A4), const P1& p1, const P2& p2, const P3& p3, const P4& p4,
4787 const P5& p5, const P6& p6) { 4948 const P5& p5, const P6& p6) {
4788 MutantRunner<R, Tuple<A1, A2, A3, A4>>* t = 4949 MutantRunner<R, base::Tuple<A1, A2, A3, A4>>* t =
4789 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4), 4950 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, X6, A1, A2, A3,
4790 Tuple<P1, P2, P3, P4, P5, P6>, Tuple<A1, A2, A3, A4>> 4951 A4),
4791 (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6)); 4952 base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<A1, A2, A3,
4792 return MutantFunctor<R, Tuple<A1, A2, A3, A4>>(t); 4953 A4>>
4954 (obj, method, base::MakeTuple(p1, p2, p3, p4, p5, p6));
4955 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4>>(t);
4793 } 4956 }
4794 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 4957 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4795 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 4958 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
4796 4959
4797 // 6 - 5 4960 // 6 - 5
4798 template <typename R, typename T, typename U, typename P1, typename P2, 4961 template <typename R, typename T, typename U, typename P1, typename P2,
4799 typename P3, typename P4, typename P5, typename P6, typename A1, 4962 typename P3, typename P4, typename P5, typename P6, typename A1,
4800 typename A2, typename A3, typename A4, typename A5, typename X1, 4963 typename A2, typename A3, typename A4, typename A5, typename X1,
4801 typename X2, typename X3, typename X4, typename X5, typename X6> 4964 typename X2, typename X3, typename X4, typename X5, typename X6>
4802 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>> 4965 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
4803 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4, 4966 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4,
4804 A5), const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5, 4967 A5), const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
4805 const P6& p6) { 4968 const P6& p6) {
4806 MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t = 4969 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
4807 new Mutant<R, T, R (U::*)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4, A5), 4970 new Mutant<R, T, R (U::*)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4, A5),
4808 Tuple<P1, P2, P3, P4, P5, P6>, Tuple<A1, A2, A3, A4, A5>> 4971 base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<A1, A2, A3,
4809 (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6)); 4972 A4, A5>>
4810 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t); 4973 (obj, method, base::MakeTuple(p1, p2, p3, p4, p5, p6));
4974 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
4811 } 4975 }
4812 4976
4813 template <typename R, typename P1, typename P2, typename P3, typename P4, 4977 template <typename R, typename P1, typename P2, typename P3, typename P4,
4814 typename P5, typename P6, typename A1, typename A2, typename A3, 4978 typename P5, typename P6, typename A1, typename A2, typename A3,
4815 typename A4, typename A5, typename X1, typename X2, typename X3, 4979 typename A4, typename A5, typename X1, typename X2, typename X3,
4816 typename X4, typename X5, typename X6> 4980 typename X4, typename X5, typename X6>
4817 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>> 4981 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
4818 CreateFunctor(R (*function)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4, A5), 4982 CreateFunctor(R (*function)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4, A5),
4819 const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5, 4983 const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
4820 const P6& p6) { 4984 const P6& p6) {
4821 MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t = 4985 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
4822 new MutantFunction<R, R (*)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4, A5), 4986 new MutantFunction<R, R (*)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4, A5),
4823 Tuple<P1, P2, P3, P4, P5, P6>, Tuple<A1, A2, A3, A4, A5 >> 4987 base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<A1,
4824 (function, MakeTuple(p1, p2, p3, p4, p5, p6)); 4988 A2, A3, A4, A5>>
4825 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t); 4989 (function, base::MakeTuple(p1, p2, p3, p4, p5, p6));
4990 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
4826 } 4991 }
4827 4992
4828 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 4993 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4829 template <typename R, typename T, typename U, typename P1, typename P2, 4994 template <typename R, typename T, typename U, typename P1, typename P2,
4830 typename P3, typename P4, typename P5, typename P6, typename A1, 4995 typename P3, typename P4, typename P5, typename P6, typename A1,
4831 typename A2, typename A3, typename A4, typename A5, typename X1, 4996 typename A2, typename A3, typename A4, typename A5, typename X1,
4832 typename X2, typename X3, typename X4, typename X5, typename X6> 4997 typename X2, typename X3, typename X4, typename X5, typename X6>
4833 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>> 4998 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
4834 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4, 4999 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4,
4835 A5), const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5, 5000 A5), const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
4836 const P6& p6) { 5001 const P6& p6) {
4837 MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t = 5002 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
4838 new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, X5, X6, A1, A2, A3 , A4, A5), 5003 new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, X5, X6, A1, A2, A3 , A4, A5),
4839 Tuple<P1, P2, P3, P4, P5, P6>, Tuple<A1, A2, A3, A4, A5>> 5004 base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<A1, A2, A3,
4840 (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6)); 5005 A4, A5>>
4841 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t); 5006 (obj, method, base::MakeTuple(p1, p2, p3, p4, p5, p6));
5007 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
4842 } 5008 }
4843 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 5009 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4844 5010
4845 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 5011 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
4846 template <typename R, typename T, typename U, typename P1, typename P2, 5012 template <typename R, typename T, typename U, typename P1, typename P2,
4847 typename P3, typename P4, typename P5, typename P6, typename A1, 5013 typename P3, typename P4, typename P5, typename P6, typename A1,
4848 typename A2, typename A3, typename A4, typename A5, typename X1, 5014 typename A2, typename A3, typename A4, typename A5, typename X1,
4849 typename X2, typename X3, typename X4, typename X5, typename X6> 5015 typename X2, typename X3, typename X4, typename X5, typename X6>
4850 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>> 5016 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
4851 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, X6, A1, A2, 5017 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, X6, A1, A2,
4852 A3, A4, A5), const P1& p1, const P2& p2, const P3& p3, const P4& p4, 5018 A3, A4, A5), const P1& p1, const P2& p2, const P3& p3, const P4& p4,
4853 const P5& p5, const P6& p6) { 5019 const P5& p5, const P6& p6) {
4854 MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t = 5020 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
4855 new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4 , A5), 5021 new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, X6, A1, A2, A3,
4856 Tuple<P1, P2, P3, P4, P5, P6>, Tuple<A1, A2, A3, A4, A5>> 5022 A4, A5),
4857 (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6)); 5023 base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<A1, A2, A3,
4858 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t); 5024 A4, A5>>
5025 (obj, method, base::MakeTuple(p1, p2, p3, p4, p5, p6));
5026 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
4859 } 5027 }
4860 5028
4861 template <typename R, typename P1, typename P2, typename P3, typename P4, 5029 template <typename R, typename P1, typename P2, typename P3, typename P4,
4862 typename P5, typename P6, typename A1, typename A2, typename A3, 5030 typename P5, typename P6, typename A1, typename A2, typename A3,
4863 typename A4, typename A5, typename X1, typename X2, typename X3, 5031 typename A4, typename A5, typename X1, typename X2, typename X3,
4864 typename X4, typename X5, typename X6> 5032 typename X4, typename X5, typename X6>
4865 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>> 5033 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
4866 CreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4, 5034 CreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4,
4867 A5), const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5, 5035 A5), const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
4868 const P6& p6) { 5036 const P6& p6) {
4869 MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t = 5037 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
4870 new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4, A5), 5038 new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, X5, X6, A1, A2, A3,
4871 Tuple<P1, P2, P3, P4, P5, P6>, Tuple<A1, A2, A3, A4, A5 >> 5039 A4, A5),
4872 (function, MakeTuple(p1, p2, p3, p4, p5, p6)); 5040 base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<A1,
4873 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t); 5041 A2, A3, A4, A5>>
5042 (function, base::MakeTuple(p1, p2, p3, p4, p5, p6));
5043 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
4874 } 5044 }
4875 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 5045 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4876 template <typename R, typename T, typename U, typename P1, typename P2, 5046 template <typename R, typename T, typename U, typename P1, typename P2,
4877 typename P3, typename P4, typename P5, typename P6, typename A1, 5047 typename P3, typename P4, typename P5, typename P6, typename A1,
4878 typename A2, typename A3, typename A4, typename A5, typename X1, 5048 typename A2, typename A3, typename A4, typename A5, typename X1,
4879 typename X2, typename X3, typename X4, typename X5, typename X6> 5049 typename X2, typename X3, typename X4, typename X5, typename X6>
4880 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>> 5050 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>
4881 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, X6, A1, A2, 5051 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, X6, A1, A2,
4882 A3, A4, A5), const P1& p1, const P2& p2, const P3& p3, const P4& p4, 5052 A3, A4, A5), const P1& p1, const P2& p2, const P3& p3, const P4& p4,
4883 const P5& p5, const P6& p6) { 5053 const P5& p5, const P6& p6) {
4884 MutantRunner<R, Tuple<A1, A2, A3, A4, A5>>* t = 5054 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5>>* t =
4885 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4, A5), 5055 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, X6, A1, A2, A3,
4886 Tuple<P1, P2, P3, P4, P5, P6>, Tuple<A1, A2, A3, A4, A5>> 5056 A4, A5),
4887 (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6)); 5057 base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<A1, A2, A3,
4888 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5>>(t); 5058 A4, A5>>
5059 (obj, method, base::MakeTuple(p1, p2, p3, p4, p5, p6));
5060 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5>>(t);
4889 } 5061 }
4890 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 5062 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4891 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 5063 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
4892 5064
4893 // 6 - 6 5065 // 6 - 6
4894 template <typename R, typename T, typename U, typename P1, typename P2, 5066 template <typename R, typename T, typename U, typename P1, typename P2,
4895 typename P3, typename P4, typename P5, typename P6, typename A1, 5067 typename P3, typename P4, typename P5, typename P6, typename A1,
4896 typename A2, typename A3, typename A4, typename A5, typename A6, 5068 typename A2, typename A3, typename A4, typename A5, typename A6,
4897 typename X1, typename X2, typename X3, typename X4, typename X5, 5069 typename X1, typename X2, typename X3, typename X4, typename X5,
4898 typename X6> 5070 typename X6>
4899 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>> 5071 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
4900 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4, A5, 5072 CreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4, A5,
4901 A6), const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5, 5073 A6), const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
4902 const P6& p6) { 5074 const P6& p6) {
4903 MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t = 5075 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
4904 new Mutant<R, T, R (U::*)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4, A5, A6), 5076 new Mutant<R, T, R (U::*)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4, A5, A6),
4905 Tuple<P1, P2, P3, P4, P5, P6>, Tuple<A1, A2, A3, A4, A5, A6>> 5077 base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<A1, A2, A3,
4906 (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6)); 5078 A4, A5, A6>>
4907 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t); 5079 (obj, method, base::MakeTuple(p1, p2, p3, p4, p5, p6));
5080 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
4908 } 5081 }
4909 5082
4910 template <typename R, typename P1, typename P2, typename P3, typename P4, 5083 template <typename R, typename P1, typename P2, typename P3, typename P4,
4911 typename P5, typename P6, typename A1, typename A2, typename A3, 5084 typename P5, typename P6, typename A1, typename A2, typename A3,
4912 typename A4, typename A5, typename A6, typename X1, typename X2, 5085 typename A4, typename A5, typename A6, typename X1, typename X2,
4913 typename X3, typename X4, typename X5, typename X6> 5086 typename X3, typename X4, typename X5, typename X6>
4914 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>> 5087 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
4915 CreateFunctor(R (*function)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4, A5, A6), 5088 CreateFunctor(R (*function)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4, A5, A6),
4916 const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5, 5089 const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
4917 const P6& p6) { 5090 const P6& p6) {
4918 MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t = 5091 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
4919 new MutantFunction<R, R (*)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4, A5, A6 ), 5092 new MutantFunction<R, R (*)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4, A5,
4920 Tuple<P1, P2, P3, P4, P5, P6>, Tuple<A1, A2, A3, A4, A5 , A6>> 5093 A6),
4921 (function, MakeTuple(p1, p2, p3, p4, p5, p6)); 5094 base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<A1,
4922 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t); 5095 A2, A3, A4, A5, A6>>
5096 (function, base::MakeTuple(p1, p2, p3, p4, p5, p6));
5097 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
4923 } 5098 }
4924 5099
4925 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 5100 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4926 template <typename R, typename T, typename U, typename P1, typename P2, 5101 template <typename R, typename T, typename U, typename P1, typename P2,
4927 typename P3, typename P4, typename P5, typename P6, typename A1, 5102 typename P3, typename P4, typename P5, typename P6, typename A1,
4928 typename A2, typename A3, typename A4, typename A5, typename A6, 5103 typename A2, typename A3, typename A4, typename A5, typename A6,
4929 typename X1, typename X2, typename X3, typename X4, typename X5, 5104 typename X1, typename X2, typename X3, typename X4, typename X5,
4930 typename X6> 5105 typename X6>
4931 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>> 5106 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
4932 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4, A5 , 5107 CreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4, A5 ,
4933 A6), const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5, 5108 A6), const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
4934 const P6& p6) { 5109 const P6& p6) {
4935 MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t = 5110 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
4936 new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, X5, X6, A1, A2, A3 , A4, A5, A6), 5111 new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, X5, X6, A1, A2, A3 , A4, A5, A6),
4937 Tuple<P1, P2, P3, P4, P5, P6>, Tuple<A1, A2, A3, A4, A5, A6>> 5112 base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<A1, A2, A3,
4938 (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6)); 5113 A4, A5, A6>>
4939 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t); 5114 (obj, method, base::MakeTuple(p1, p2, p3, p4, p5, p6));
5115 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
4940 } 5116 }
4941 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 5117 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4942 5118
4943 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 5119 #if defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
4944 template <typename R, typename T, typename U, typename P1, typename P2, 5120 template <typename R, typename T, typename U, typename P1, typename P2,
4945 typename P3, typename P4, typename P5, typename P6, typename A1, 5121 typename P3, typename P4, typename P5, typename P6, typename A1,
4946 typename A2, typename A3, typename A4, typename A5, typename A6, 5122 typename A2, typename A3, typename A4, typename A5, typename A6,
4947 typename X1, typename X2, typename X3, typename X4, typename X5, 5123 typename X1, typename X2, typename X3, typename X4, typename X5,
4948 typename X6> 5124 typename X6>
4949 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>> 5125 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
4950 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, X6, A1, A2, 5126 CreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, X6, A1, A2,
4951 A3, A4, A5, A6), const P1& p1, const P2& p2, const P3& p3, const P4& p4, 5127 A3, A4, A5, A6), const P1& p1, const P2& p2, const P3& p3, const P4& p4,
4952 const P5& p5, const P6& p6) { 5128 const P5& p5, const P6& p6) {
4953 MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t = 5129 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
4954 new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4 , A5, A6), 5130 new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, X6, A1, A2, A3,
4955 Tuple<P1, P2, P3, P4, P5, P6>, Tuple<A1, A2, A3, A4, A5, A6>> 5131 A4, A5, A6),
4956 (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6)); 5132 base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<A1, A2, A3,
4957 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t); 5133 A4, A5, A6>>
5134 (obj, method, base::MakeTuple(p1, p2, p3, p4, p5, p6));
5135 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
4958 } 5136 }
4959 5137
4960 template <typename R, typename P1, typename P2, typename P3, typename P4, 5138 template <typename R, typename P1, typename P2, typename P3, typename P4,
4961 typename P5, typename P6, typename A1, typename A2, typename A3, 5139 typename P5, typename P6, typename A1, typename A2, typename A3,
4962 typename A4, typename A5, typename A6, typename X1, typename X2, 5140 typename A4, typename A5, typename A6, typename X1, typename X2,
4963 typename X3, typename X4, typename X5, typename X6> 5141 typename X3, typename X4, typename X5, typename X6>
4964 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>> 5142 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
4965 CreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4, 5143 CreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4,
4966 A5, A6), const P1& p1, const P2& p2, const P3& p3, const P4& p4, 5144 A5, A6), const P1& p1, const P2& p2, const P3& p3, const P4& p4,
4967 const P5& p5, const P6& p6) { 5145 const P5& p5, const P6& p6) {
4968 MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t = 5146 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
4969 new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4, A5, A6), 5147 new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, X5, X6, A1, A2, A3,
4970 Tuple<P1, P2, P3, P4, P5, P6>, Tuple<A1, A2, A3, A4, A5 , A6>> 5148 A4, A5, A6),
4971 (function, MakeTuple(p1, p2, p3, p4, p5, p6)); 5149 base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<A1,
4972 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t); 5150 A2, A3, A4, A5, A6>>
5151 (function, base::MakeTuple(p1, p2, p3, p4, p5, p6));
5152 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
4973 } 5153 }
4974 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 5154 #ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4975 template <typename R, typename T, typename U, typename P1, typename P2, 5155 template <typename R, typename T, typename U, typename P1, typename P2,
4976 typename P3, typename P4, typename P5, typename P6, typename A1, 5156 typename P3, typename P4, typename P5, typename P6, typename A1,
4977 typename A2, typename A3, typename A4, typename A5, typename A6, 5157 typename A2, typename A3, typename A4, typename A5, typename A6,
4978 typename X1, typename X2, typename X3, typename X4, typename X5, 5158 typename X1, typename X2, typename X3, typename X4, typename X5,
4979 typename X6> 5159 typename X6>
4980 inline MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>> 5160 inline MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>
4981 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, X6, A1, A2, 5161 CreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, X6, A1, A2,
4982 A3, A4, A5, A6), const P1& p1, const P2& p2, const P3& p3, const P4& p4, 5162 A3, A4, A5, A6), const P1& p1, const P2& p2, const P3& p3, const P4& p4,
4983 const P5& p5, const P6& p6) { 5163 const P5& p5, const P6& p6) {
4984 MutantRunner<R, Tuple<A1, A2, A3, A4, A5, A6>>* t = 5164 MutantRunner<R, base::Tuple<A1, A2, A3, A4, A5, A6>>* t =
4985 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4, A5, A6), 5165 new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, X6, A1, A2, A3,
4986 Tuple<P1, P2, P3, P4, P5, P6>, Tuple<A1, A2, A3, A4, A5, A6>> 5166 A4, A5, A6),
4987 (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6)); 5167 base::Tuple<P1, P2, P3, P4, P5, P6>, base::Tuple<A1, A2, A3,
4988 return MutantFunctor<R, Tuple<A1, A2, A3, A4, A5, A6>>(t); 5168 A4, A5, A6>>
5169 (obj, method, base::MakeTuple(p1, p2, p3, p4, p5, p6));
5170 return MutantFunctor<R, base::Tuple<A1, A2, A3, A4, A5, A6>>(t);
4989 } 5171 }
4990 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING 5172 #endif // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4991 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64) 5173 #endif // defined (OS_WIN) && !defined (ARCH_CPU_X86_64)
4992 5174
4993 } // namespace testing 5175 } // namespace testing
4994 5176
4995 #endif // TESTING_GMOCK_MUTANT_H_ 5177 #endif // TESTING_GMOCK_MUTANT_H_
OLDNEW
« no previous file with comments | « testing/generate_gmock_mutant.py ('k') | tools/ipc_fuzzer/fuzzer/fuzzer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698