1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file.
4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// This file automatically generated by testing/generate_gmock_mutant.py.
6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// DO NOT EDIT.
7c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifndef TESTING_GMOCK_MUTANT_H_
9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define TESTING_GMOCK_MUTANT_H_
10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// The intention of this file is to make possible using GMock actions in
12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// all of its syntactic beauty. Classes and helper functions can be used as
13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// more generic variants of Task and Callback classes (see base/task.h)
14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Mutant supports both pre-bound arguments (like Task) and call-time
15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// arguments (like Callback) - hence the name. :-)
16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//
17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// DispatchToMethod/Function supports two sets of arguments: pre-bound (P) and
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// call-time (C). The arguments as well as the return type are templatized.
19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// DispatchToMethod/Function will also try to call the selected method or
20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// function even if provided pre-bound arguments does not match exactly with
21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// the function signature hence the X1, X2 ... XN parameters in CreateFunctor.
22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// DispatchToMethod will try to invoke method that may not belong to the
23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// object's class itself but to the object's class base class.
24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//
25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Additionally you can bind the object at calltime by binding a pointer to
26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// pointer to the object at creation time - before including this file you
27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// have to #define GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING.
28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//
29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// TODO(stoyan): It's yet not clear to me should we use T& and T&* instead
30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// of T* and T** when we invoke CreateFunctor to match the EXPECT_CALL style.
31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//
32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//
33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Sample usage with gMock:
34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//
35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// struct Mock : public ObjectDelegate {
36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//   MOCK_METHOD2(string, OnRequest(int n, const string& request));
37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//   MOCK_METHOD1(void, OnQuit(int exit_code));
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//   MOCK_METHOD2(void, LogMessage(int level, const string& message));
39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//
40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//   string HandleFlowers(const string& reply, int n, const string& request) {
41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//     string result = SStringPrintf("In request of %d %s ", n, request);
42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//     for (int i = 0; i < n; ++i) result.append(reply)
43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//     return result;
44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//   }
45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//
46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//   void DoLogMessage(int level, const string& message) {
47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//   }
48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//
49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//   void QuitMessageLoop(int seconds) {
50c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//     MessageLoop* loop = MessageLoop::current();
51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//     loop->PostDelayedTask(FROM_HERE, new MessageLoop::QuitTask,
52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//                           1000 * seconds);
53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//   }
54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// };
55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//
56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Mock mock;
57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// // Will invoke mock.HandleFlowers("orchids", n, request)
58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// // "orchids" is a pre-bound argument, and <n> and <request> are call-time
59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// // arguments - they are not known until the OnRequest mock is invoked.
60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// EXPECT_CALL(mock, OnRequest(Ge(5), StartsWith("flower"))
61c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//   .Times(1)
62c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//   .WillOnce(Invoke(CreateFunctor(&mock, &Mock::HandleFlowers,
63c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//       string("orchids"))));
64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//
65c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//
66c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// // No pre-bound arguments, two call-time arguments passed
67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// // directly to DoLogMessage
68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// EXPECT_CALL(mock, OnLogMessage(_, _))
69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//   .Times(AnyNumber())
70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//   .WillAlways(Invoke(CreateFunctor, &mock, &Mock::DoLogMessage));
71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//
72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//
73c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// // In this case we have a single pre-bound argument - 3. We ignore
74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// // all of the arguments of OnQuit.
75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// EXCEPT_CALL(mock, OnQuit(_))
76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//   .Times(1)
77c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//   .WillOnce(InvokeWithoutArgs(CreateFunctor(
78c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//       &mock, &Mock::QuitMessageLoop, 3)));
79c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//
80c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// MessageLoop loop;
81c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// loop.Run();
82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//
83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//
84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//  // Here is another example of how we can set an action that invokes
85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//  // method of an object that is not yet created.
86c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// struct Mock : public ObjectDelegate {
87c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//   MOCK_METHOD1(void, DemiurgeCreated(Demiurge*));
88c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//   MOCK_METHOD2(void, OnRequest(int count, const string&));
89c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//
90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//   void StoreDemiurge(Demiurge* w) {
91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//     demiurge_ = w;
92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//   }
93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//
94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//   Demiurge* demiurge;
95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// }
96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//
97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// EXPECT_CALL(mock, DemiurgeCreated(_)).Times(1)
98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//    .WillOnce(Invoke(CreateFunctor(&mock, &Mock::StoreDemiurge)));
99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//
100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// EXPECT_CALL(mock, OnRequest(_, StrEq("Moby Dick")))
101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//    .Times(AnyNumber())
102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//    .WillAlways(WithArgs<0>(Invoke(
103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//        CreateFunctor(&mock->demiurge_, &Demiurge::DecreaseMonsters))));
104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch//
105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
106ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "base/memory/linked_ptr.h"
107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/tuple.h"  // for Tuple
108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochnamespace testing {
110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 0 - 0
112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename Method>
113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToMethod(T* obj, Method method,
114c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple0& p,
115c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple0& c) {
116c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (obj->*method)();
117c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
118c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename Function>
119c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToFunction(Function function,
120c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple0& p,
121c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple0& c) {
122c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (*function)();
123c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
124c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
125c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 0 - 1
126c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename Method, typename C1>
127c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToMethod(T* obj, Method method,
128c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple0& p,
129c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple1<C1>& c) {
130c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (obj->*method)(c.a);
131c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
132c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename Function, typename C1>
133c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToFunction(Function function,
134c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple0& p,
135c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple1<C1>& c) {
136c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (*function)(c.a);
137c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
138c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
139c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 0 - 2
140c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename Method, typename C1, typename C2>
141c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToMethod(T* obj, Method method,
142c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple0& p,
143c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple2<C1, C2>& c) {
144c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (obj->*method)(c.a, c.b);
145c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
146c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename Function, typename C1, typename C2>
147c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToFunction(Function function,
148c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple0& p,
149c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple2<C1, C2>& c) {
150c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (*function)(c.a, c.b);
151c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
152c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
153c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 0 - 3
154c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename Method, typename C1, typename C2,
155c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename C3>
156c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToMethod(T* obj, Method method,
157c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple0& p,
158c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple3<C1, C2, C3>& c) {
159c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (obj->*method)(c.a, c.b, c.c);
160c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
161c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename Function, typename C1, typename C2, typename C3>
162c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToFunction(Function function,
163c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple0& p,
164c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple3<C1, C2, C3>& c) {
165c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (*function)(c.a, c.b, c.c);
166c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
167c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
168c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 0 - 4
169c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename Method, typename C1, typename C2,
170c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename C3, typename C4>
171c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToMethod(T* obj, Method method,
172c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple0& p,
173c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple4<C1, C2, C3, C4>& c) {
174c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (obj->*method)(c.a, c.b, c.c, c.d);
175c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
176c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename Function, typename C1, typename C2, typename C3,
177c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename C4>
178c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToFunction(Function function,
179c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple0& p,
180c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple4<C1, C2, C3, C4>& c) {
181c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (*function)(c.a, c.b, c.c, c.d);
182c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
183c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
184c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 0 - 5
185c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename Method, typename C1, typename C2,
186c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename C3, typename C4, typename C5>
187c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToMethod(T* obj, Method method,
188c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple0& p,
189c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple5<C1, C2, C3, C4, C5>& c) {
190c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (obj->*method)(c.a, c.b, c.c, c.d, c.e);
191c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
192c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename Function, typename C1, typename C2, typename C3,
193c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename C4, typename C5>
194c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToFunction(Function function,
195c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple0& p,
196c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple5<C1, C2, C3, C4, C5>& c) {
197c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (*function)(c.a, c.b, c.c, c.d, c.e);
198c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
199c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
200c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 0 - 6
201c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename Method, typename C1, typename C2,
202c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename C3, typename C4, typename C5, typename C6>
203c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToMethod(T* obj, Method method,
204c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple0& p,
205c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple6<C1, C2, C3, C4, C5, C6>& c) {
206c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (obj->*method)(c.a, c.b, c.c, c.d, c.e, c.f);
207c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
208c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename Function, typename C1, typename C2, typename C3,
209c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename C4, typename C5, typename C6>
210c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToFunction(Function function,
211c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple0& p,
212c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple6<C1, C2, C3, C4, C5, C6>& c) {
213c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (*function)(c.a, c.b, c.c, c.d, c.e, c.f);
214c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
215c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
216c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 1 - 0
217c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename Method, typename P1>
218c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToMethod(T* obj, Method method,
219c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple1<P1>& p,
220c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple0& c) {
221c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (obj->*method)(p.a);
222c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
223c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename Function, typename P1>
224c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToFunction(Function function,
225c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple1<P1>& p,
226c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple0& c) {
227c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (*function)(p.a);
228c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
229c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
230c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 1 - 1
231c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename Method, typename P1, typename C1>
232c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToMethod(T* obj, Method method,
233c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple1<P1>& p,
234c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple1<C1>& c) {
235c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (obj->*method)(p.a, c.a);
236c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
237c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename Function, typename P1, typename C1>
238c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToFunction(Function function,
239c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple1<P1>& p,
240c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple1<C1>& c) {
241c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (*function)(p.a, c.a);
242c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
243c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
244c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 1 - 2
245c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename Method, typename P1, typename C1,
246c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename C2>
247c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToMethod(T* obj, Method method,
248c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple1<P1>& p,
249c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple2<C1, C2>& c) {
250c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (obj->*method)(p.a, c.a, c.b);
251c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
252c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename Function, typename P1, typename C1, typename C2>
253c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToFunction(Function function,
254c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple1<P1>& p,
255c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple2<C1, C2>& c) {
256c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (*function)(p.a, c.a, c.b);
257c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
258c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
259c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 1 - 3
260c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename Method, typename P1, typename C1,
261c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename C2, typename C3>
262c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToMethod(T* obj, Method method,
263c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple1<P1>& p,
264c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple3<C1, C2, C3>& c) {
265c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (obj->*method)(p.a, c.a, c.b, c.c);
266c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
267c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename Function, typename P1, typename C1, typename C2,
268c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename C3>
269c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToFunction(Function function,
270c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple1<P1>& p,
271c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple3<C1, C2, C3>& c) {
272c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (*function)(p.a, c.a, c.b, c.c);
273c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
274c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
275c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 1 - 4
276c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename Method, typename P1, typename C1,
277c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename C2, typename C3, typename C4>
278c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToMethod(T* obj, Method method,
279c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple1<P1>& p,
280c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple4<C1, C2, C3, C4>& c) {
281c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (obj->*method)(p.a, c.a, c.b, c.c, c.d);
282c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
283c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename Function, typename P1, typename C1, typename C2,
284c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename C3, typename C4>
285c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToFunction(Function function,
286c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple1<P1>& p,
287c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple4<C1, C2, C3, C4>& c) {
288c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (*function)(p.a, c.a, c.b, c.c, c.d);
289c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
290c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
291c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 1 - 5
292c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename Method, typename P1, typename C1,
293c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename C2, typename C3, typename C4, typename C5>
294c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToMethod(T* obj, Method method,
295c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple1<P1>& p,
296c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple5<C1, C2, C3, C4, C5>& c) {
297c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (obj->*method)(p.a, c.a, c.b, c.c, c.d, c.e);
298c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
299c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename Function, typename P1, typename C1, typename C2,
300c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename C3, typename C4, typename C5>
301c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToFunction(Function function,
302c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple1<P1>& p,
303c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple5<C1, C2, C3, C4, C5>& c) {
304c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (*function)(p.a, c.a, c.b, c.c, c.d, c.e);
305c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
306c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
307c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 1 - 6
308c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename Method, typename P1, typename C1,
309c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename C2, typename C3, typename C4, typename C5, typename C6>
310c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToMethod(T* obj, Method method,
311c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple1<P1>& p,
312c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple6<C1, C2, C3, C4, C5, C6>& c) {
313c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (obj->*method)(p.a, c.a, c.b, c.c, c.d, c.e, c.f);
314c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
315c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename Function, typename P1, typename C1, typename C2,
316c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename C3, typename C4, typename C5, typename C6>
317c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToFunction(Function function,
318c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple1<P1>& p,
319c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple6<C1, C2, C3, C4, C5, C6>& c) {
320c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (*function)(p.a, c.a, c.b, c.c, c.d, c.e, c.f);
321c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
322c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
323c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 2 - 0
324c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename Method, typename P1, typename P2>
325c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToMethod(T* obj, Method method,
326c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple2<P1, P2>& p,
327c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple0& c) {
328c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (obj->*method)(p.a, p.b);
329c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
330c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename Function, typename P1, typename P2>
331c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToFunction(Function function,
332c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple2<P1, P2>& p,
333c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple0& c) {
334c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (*function)(p.a, p.b);
335c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
336c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
337c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 2 - 1
338c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename Method, typename P1, typename P2,
339c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename C1>
340c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToMethod(T* obj, Method method,
341c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple2<P1, P2>& p,
342c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple1<C1>& c) {
343c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (obj->*method)(p.a, p.b, c.a);
344c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
345c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename Function, typename P1, typename P2, typename C1>
346c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToFunction(Function function,
347c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple2<P1, P2>& p,
348c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple1<C1>& c) {
349c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (*function)(p.a, p.b, c.a);
350c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
351c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
352c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 2 - 2
353c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename Method, typename P1, typename P2,
354c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename C1, typename C2>
355c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToMethod(T* obj, Method method,
356c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple2<P1, P2>& p,
357c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple2<C1, C2>& c) {
358c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (obj->*method)(p.a, p.b, c.a, c.b);
359c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
360c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename Function, typename P1, typename P2, typename C1,
361c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename C2>
362c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToFunction(Function function,
363c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple2<P1, P2>& p,
364c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple2<C1, C2>& c) {
365c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (*function)(p.a, p.b, c.a, c.b);
366c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
367c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
368c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 2 - 3
369c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename Method, typename P1, typename P2,
370c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename C1, typename C2, typename C3>
371c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToMethod(T* obj, Method method,
372c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple2<P1, P2>& p,
373c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple3<C1, C2, C3>& c) {
374c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (obj->*method)(p.a, p.b, c.a, c.b, c.c);
375c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
376c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename Function, typename P1, typename P2, typename C1,
377c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename C2, typename C3>
378c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToFunction(Function function,
379c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple2<P1, P2>& p,
380c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple3<C1, C2, C3>& c) {
381c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (*function)(p.a, p.b, c.a, c.b, c.c);
382c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
383c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
384c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 2 - 4
385c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename Method, typename P1, typename P2,
386c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename C1, typename C2, typename C3, typename C4>
387c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToMethod(T* obj, Method method,
388c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple2<P1, P2>& p,
389c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple4<C1, C2, C3, C4>& c) {
390c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (obj->*method)(p.a, p.b, c.a, c.b, c.c, c.d);
391c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
392c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename Function, typename P1, typename P2, typename C1,
393c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename C2, typename C3, typename C4>
394c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToFunction(Function function,
395c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple2<P1, P2>& p,
396c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple4<C1, C2, C3, C4>& c) {
397c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (*function)(p.a, p.b, c.a, c.b, c.c, c.d);
398c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
399c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
400c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 2 - 5
401c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename Method, typename P1, typename P2,
402c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename C1, typename C2, typename C3, typename C4, typename C5>
403c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToMethod(T* obj, Method method,
404c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple2<P1, P2>& p,
405c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple5<C1, C2, C3, C4, C5>& c) {
406c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (obj->*method)(p.a, p.b, c.a, c.b, c.c, c.d, c.e);
407c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
408c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename Function, typename P1, typename P2, typename C1,
409c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename C2, typename C3, typename C4, typename C5>
410c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToFunction(Function function,
411c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple2<P1, P2>& p,
412c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple5<C1, C2, C3, C4, C5>& c) {
413c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (*function)(p.a, p.b, c.a, c.b, c.c, c.d, c.e);
414c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
415c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
416c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 2 - 6
417c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename Method, typename P1, typename P2,
418c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename C1, typename C2, typename C3, typename C4, typename C5,
419c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename C6>
420c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToMethod(T* obj, Method method,
421c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple2<P1, P2>& p,
422c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple6<C1, C2, C3, C4, C5, C6>& c) {
423c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (obj->*method)(p.a, p.b, c.a, c.b, c.c, c.d, c.e, c.f);
424c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
425c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename Function, typename P1, typename P2, typename C1,
426c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename C2, typename C3, typename C4, typename C5, typename C6>
427c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToFunction(Function function,
428c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple2<P1, P2>& p,
429c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple6<C1, C2, C3, C4, C5, C6>& c) {
430c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (*function)(p.a, p.b, c.a, c.b, c.c, c.d, c.e, c.f);
431c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
432c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
433c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 3 - 0
434c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename Method, typename P1, typename P2,
435c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3>
436c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToMethod(T* obj, Method method,
437c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple3<P1, P2, P3>& p,
438c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple0& c) {
439c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (obj->*method)(p.a, p.b, p.c);
440c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
441c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename Function, typename P1, typename P2, typename P3>
442c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToFunction(Function function,
443c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple3<P1, P2, P3>& p,
444c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple0& c) {
445c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (*function)(p.a, p.b, p.c);
446c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
447c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
448c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 3 - 1
449c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename Method, typename P1, typename P2,
450c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename C1>
451c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToMethod(T* obj, Method method,
452c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple3<P1, P2, P3>& p,
453c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple1<C1>& c) {
454c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (obj->*method)(p.a, p.b, p.c, c.a);
455c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
456c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename Function, typename P1, typename P2, typename P3,
457c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename C1>
458c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToFunction(Function function,
459c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple3<P1, P2, P3>& p,
460c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple1<C1>& c) {
461c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (*function)(p.a, p.b, p.c, c.a);
462c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
463c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
464c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 3 - 2
465c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename Method, typename P1, typename P2,
466c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename C1, typename C2>
467c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToMethod(T* obj, Method method,
468c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple3<P1, P2, P3>& p,
469c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple2<C1, C2>& c) {
470c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (obj->*method)(p.a, p.b, p.c, c.a, c.b);
471c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
472c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename Function, typename P1, typename P2, typename P3,
473c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename C1, typename C2>
474c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToFunction(Function function,
475c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple3<P1, P2, P3>& p,
476c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple2<C1, C2>& c) {
477c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (*function)(p.a, p.b, p.c, c.a, c.b);
478c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
479c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
480c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 3 - 3
481c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename Method, typename P1, typename P2,
482c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename C1, typename C2, typename C3>
483c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToMethod(T* obj, Method method,
484c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple3<P1, P2, P3>& p,
485c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple3<C1, C2, C3>& c) {
486c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (obj->*method)(p.a, p.b, p.c, c.a, c.b, c.c);
487c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
488c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename Function, typename P1, typename P2, typename P3,
489c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename C1, typename C2, typename C3>
490c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToFunction(Function function,
491c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple3<P1, P2, P3>& p,
492c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple3<C1, C2, C3>& c) {
493c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (*function)(p.a, p.b, p.c, c.a, c.b, c.c);
494c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
495c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
496c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 3 - 4
497c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename Method, typename P1, typename P2,
498c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename C1, typename C2, typename C3, typename C4>
499c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToMethod(T* obj, Method method,
500c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple3<P1, P2, P3>& p,
501c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple4<C1, C2, C3, C4>& c) {
502c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (obj->*method)(p.a, p.b, p.c, c.a, c.b, c.c, c.d);
503c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
504c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename Function, typename P1, typename P2, typename P3,
505c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename C1, typename C2, typename C3, typename C4>
506c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToFunction(Function function,
507c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple3<P1, P2, P3>& p,
508c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple4<C1, C2, C3, C4>& c) {
509c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (*function)(p.a, p.b, p.c, c.a, c.b, c.c, c.d);
510c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
511c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
512c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 3 - 5
513c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename Method, typename P1, typename P2,
514c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename C1, typename C2, typename C3, typename C4,
515c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename C5>
516c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToMethod(T* obj, Method method,
517c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple3<P1, P2, P3>& p,
518c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple5<C1, C2, C3, C4, C5>& c) {
519c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (obj->*method)(p.a, p.b, p.c, c.a, c.b, c.c, c.d, c.e);
520c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
521c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename Function, typename P1, typename P2, typename P3,
522c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename C1, typename C2, typename C3, typename C4, typename C5>
523c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToFunction(Function function,
524c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple3<P1, P2, P3>& p,
525c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple5<C1, C2, C3, C4, C5>& c) {
526c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (*function)(p.a, p.b, p.c, c.a, c.b, c.c, c.d, c.e);
527c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
528c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
529c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 3 - 6
530c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename Method, typename P1, typename P2,
531c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename C1, typename C2, typename C3, typename C4,
532c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename C5, typename C6>
533c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToMethod(T* obj, Method method,
534c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple3<P1, P2, P3>& p,
535c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple6<C1, C2, C3, C4, C5, C6>& c) {
536c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (obj->*method)(p.a, p.b, p.c, c.a, c.b, c.c, c.d, c.e, c.f);
537c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
538c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename Function, typename P1, typename P2, typename P3,
539c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename C1, typename C2, typename C3, typename C4, typename C5,
540c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename C6>
541c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToFunction(Function function,
542c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple3<P1, P2, P3>& p,
543c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple6<C1, C2, C3, C4, C5, C6>& c) {
544c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (*function)(p.a, p.b, p.c, c.a, c.b, c.c, c.d, c.e, c.f);
545c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
546c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
547c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 4 - 0
548c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename Method, typename P1, typename P2,
549c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4>
550c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToMethod(T* obj, Method method,
551c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple4<P1, P2, P3, P4>& p,
552c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple0& c) {
553c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (obj->*method)(p.a, p.b, p.c, p.d);
554c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
555c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename Function, typename P1, typename P2, typename P3,
556c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P4>
557c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToFunction(Function function,
558c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple4<P1, P2, P3, P4>& p,
559c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple0& c) {
560c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (*function)(p.a, p.b, p.c, p.d);
561c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
562c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
563c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 4 - 1
564c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename Method, typename P1, typename P2,
565c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename C1>
566c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToMethod(T* obj, Method method,
567c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple4<P1, P2, P3, P4>& p,
568c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple1<C1>& c) {
569c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (obj->*method)(p.a, p.b, p.c, p.d, c.a);
570c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
571c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename Function, typename P1, typename P2, typename P3,
572c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P4, typename C1>
573c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToFunction(Function function,
574c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple4<P1, P2, P3, P4>& p,
575c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple1<C1>& c) {
576c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (*function)(p.a, p.b, p.c, p.d, c.a);
577c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
578c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
579c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 4 - 2
580c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename Method, typename P1, typename P2,
581c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename C1, typename C2>
582c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToMethod(T* obj, Method method,
583c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple4<P1, P2, P3, P4>& p,
584c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple2<C1, C2>& c) {
585c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (obj->*method)(p.a, p.b, p.c, p.d, c.a, c.b);
586c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
587c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename Function, typename P1, typename P2, typename P3,
588c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P4, typename C1, typename C2>
589c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToFunction(Function function,
590c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple4<P1, P2, P3, P4>& p,
591c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple2<C1, C2>& c) {
592c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (*function)(p.a, p.b, p.c, p.d, c.a, c.b);
593c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
594c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
595c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 4 - 3
596c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename Method, typename P1, typename P2,
597c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename C1, typename C2, typename C3>
598c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToMethod(T* obj, Method method,
599c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple4<P1, P2, P3, P4>& p,
600c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple3<C1, C2, C3>& c) {
601c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (obj->*method)(p.a, p.b, p.c, p.d, c.a, c.b, c.c);
602c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
603c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename Function, typename P1, typename P2, typename P3,
604c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P4, typename C1, typename C2, typename C3>
605c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToFunction(Function function,
606c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple4<P1, P2, P3, P4>& p,
607c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple3<C1, C2, C3>& c) {
608c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (*function)(p.a, p.b, p.c, p.d, c.a, c.b, c.c);
609c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
610c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
611c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 4 - 4
612c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename Method, typename P1, typename P2,
613c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename C1, typename C2, typename C3,
614c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename C4>
615c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToMethod(T* obj, Method method,
616c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple4<P1, P2, P3, P4>& p,
617c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple4<C1, C2, C3, C4>& c) {
618c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (obj->*method)(p.a, p.b, p.c, p.d, c.a, c.b, c.c, c.d);
619c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
620c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename Function, typename P1, typename P2, typename P3,
621c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P4, typename C1, typename C2, typename C3, typename C4>
622c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToFunction(Function function,
623c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple4<P1, P2, P3, P4>& p,
624c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple4<C1, C2, C3, C4>& c) {
625c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (*function)(p.a, p.b, p.c, p.d, c.a, c.b, c.c, c.d);
626c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
627c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
628c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 4 - 5
629c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename Method, typename P1, typename P2,
630c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename C1, typename C2, typename C3,
631c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename C4, typename C5>
632c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToMethod(T* obj, Method method,
633c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple4<P1, P2, P3, P4>& p,
634c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple5<C1, C2, C3, C4, C5>& c) {
635c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (obj->*method)(p.a, p.b, p.c, p.d, c.a, c.b, c.c, c.d, c.e);
636c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
637c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename Function, typename P1, typename P2, typename P3,
638c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P4, typename C1, typename C2, typename C3, typename C4,
639c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename C5>
640c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToFunction(Function function,
641c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple4<P1, P2, P3, P4>& p,
642c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple5<C1, C2, C3, C4, C5>& c) {
643c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (*function)(p.a, p.b, p.c, p.d, c.a, c.b, c.c, c.d, c.e);
644c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
645c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
646c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 4 - 6
647c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename Method, typename P1, typename P2,
648c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename C1, typename C2, typename C3,
649c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename C4, typename C5, typename C6>
650c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToMethod(T* obj, Method method,
651c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple4<P1, P2, P3, P4>& p,
652c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple6<C1, C2, C3, C4, C5, C6>& c) {
653c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (obj->*method)(p.a, p.b, p.c, p.d, c.a, c.b, c.c, c.d, c.e, c.f);
654c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
655c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename Function, typename P1, typename P2, typename P3,
656c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P4, typename C1, typename C2, typename C3, typename C4,
657c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename C5, typename C6>
658c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToFunction(Function function,
659c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple4<P1, P2, P3, P4>& p,
660c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple6<C1, C2, C3, C4, C5, C6>& c) {
661c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (*function)(p.a, p.b, p.c, p.d, c.a, c.b, c.c, c.d, c.e, c.f);
662c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
663c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
664c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 5 - 0
665c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename Method, typename P1, typename P2,
666c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename P5>
667c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToMethod(T* obj, Method method,
668c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple5<P1, P2, P3, P4, P5>& p,
669c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple0& c) {
670c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (obj->*method)(p.a, p.b, p.c, p.d, p.e);
671c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
672c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename Function, typename P1, typename P2, typename P3,
673c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P4, typename P5>
674c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToFunction(Function function,
675c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple5<P1, P2, P3, P4, P5>& p,
676c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple0& c) {
677c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (*function)(p.a, p.b, p.c, p.d, p.e);
678c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
679c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
680c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 5 - 1
681c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename Method, typename P1, typename P2,
682c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename P5, typename C1>
683c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToMethod(T* obj, Method method,
684c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple5<P1, P2, P3, P4, P5>& p,
685c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple1<C1>& c) {
686c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (obj->*method)(p.a, p.b, p.c, p.d, p.e, c.a);
687c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
688c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename Function, typename P1, typename P2, typename P3,
689c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P4, typename P5, typename C1>
690c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToFunction(Function function,
691c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple5<P1, P2, P3, P4, P5>& p,
692c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple1<C1>& c) {
693c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (*function)(p.a, p.b, p.c, p.d, p.e, c.a);
694c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
695c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
696c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 5 - 2
697c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename Method, typename P1, typename P2,
698c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename P5, typename C1, typename C2>
699c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToMethod(T* obj, Method method,
700c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple5<P1, P2, P3, P4, P5>& p,
701c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple2<C1, C2>& c) {
702c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (obj->*method)(p.a, p.b, p.c, p.d, p.e, c.a, c.b);
703c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
704c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename Function, typename P1, typename P2, typename P3,
705c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P4, typename P5, typename C1, typename C2>
706c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToFunction(Function function,
707c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple5<P1, P2, P3, P4, P5>& p,
708c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple2<C1, C2>& c) {
709c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (*function)(p.a, p.b, p.c, p.d, p.e, c.a, c.b);
710c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
711c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
712c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 5 - 3
713c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename Method, typename P1, typename P2,
714c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename P5, typename C1, typename C2,
715c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename C3>
716c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToMethod(T* obj, Method method,
717c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple5<P1, P2, P3, P4, P5>& p,
718c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple3<C1, C2, C3>& c) {
719c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (obj->*method)(p.a, p.b, p.c, p.d, p.e, c.a, c.b, c.c);
720c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
721c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename Function, typename P1, typename P2, typename P3,
722c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P4, typename P5, typename C1, typename C2, typename C3>
723c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToFunction(Function function,
724c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple5<P1, P2, P3, P4, P5>& p,
725c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple3<C1, C2, C3>& c) {
726c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (*function)(p.a, p.b, p.c, p.d, p.e, c.a, c.b, c.c);
727c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
728c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
729c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 5 - 4
730c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename Method, typename P1, typename P2,
731c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename P5, typename C1, typename C2,
732c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename C3, typename C4>
733c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToMethod(T* obj, Method method,
734c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple5<P1, P2, P3, P4, P5>& p,
735c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple4<C1, C2, C3, C4>& c) {
736c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (obj->*method)(p.a, p.b, p.c, p.d, p.e, c.a, c.b, c.c, c.d);
737c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
738c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename Function, typename P1, typename P2, typename P3,
739c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P4, typename P5, typename C1, typename C2, typename C3,
740c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename C4>
741c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToFunction(Function function,
742c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple5<P1, P2, P3, P4, P5>& p,
743c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple4<C1, C2, C3, C4>& c) {
744c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (*function)(p.a, p.b, p.c, p.d, p.e, c.a, c.b, c.c, c.d);
745c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
746c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
747c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 5 - 5
748c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename Method, typename P1, typename P2,
749c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename P5, typename C1, typename C2,
750c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename C3, typename C4, typename C5>
751c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToMethod(T* obj, Method method,
752c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple5<P1, P2, P3, P4, P5>& p,
753c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple5<C1, C2, C3, C4, C5>& c) {
754c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (obj->*method)(p.a, p.b, p.c, p.d, p.e, c.a, c.b, c.c, c.d, c.e);
755c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
756c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename Function, typename P1, typename P2, typename P3,
757c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P4, typename P5, typename C1, typename C2, typename C3,
758c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename C4, typename C5>
759c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToFunction(Function function,
760c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple5<P1, P2, P3, P4, P5>& p,
761c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple5<C1, C2, C3, C4, C5>& c) {
762c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (*function)(p.a, p.b, p.c, p.d, p.e, c.a, c.b, c.c, c.d, c.e);
763c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
764c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
765c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 5 - 6
766c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename Method, typename P1, typename P2,
767c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename P5, typename C1, typename C2,
768c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename C3, typename C4, typename C5, typename C6>
769c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToMethod(T* obj, Method method,
770c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple5<P1, P2, P3, P4, P5>& p,
771c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple6<C1, C2, C3, C4, C5, C6>& c) {
772c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (obj->*method)(p.a, p.b, p.c, p.d, p.e, c.a, c.b, c.c, c.d, c.e, c.f);
773c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
774c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename Function, typename P1, typename P2, typename P3,
775c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P4, typename P5, typename C1, typename C2, typename C3,
776c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename C4, typename C5, typename C6>
777c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToFunction(Function function,
778c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple5<P1, P2, P3, P4, P5>& p,
779c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple6<C1, C2, C3, C4, C5, C6>& c) {
780c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (*function)(p.a, p.b, p.c, p.d, p.e, c.a, c.b, c.c, c.d, c.e, c.f);
781c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
782c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
783c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 6 - 0
784c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename Method, typename P1, typename P2,
785c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename P5, typename P6>
786c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToMethod(T* obj, Method method,
787c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple6<P1, P2, P3, P4, P5, P6>& p,
788c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple0& c) {
789c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (obj->*method)(p.a, p.b, p.c, p.d, p.e, p.f);
790c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
791c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename Function, typename P1, typename P2, typename P3,
792c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P4, typename P5, typename P6>
793c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToFunction(Function function,
794c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple6<P1, P2, P3, P4, P5, P6>& p,
795c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple0& c) {
796c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (*function)(p.a, p.b, p.c, p.d, p.e, p.f);
797c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
798c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
799c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 6 - 1
800c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename Method, typename P1, typename P2,
801c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename P5, typename P6, typename C1>
802c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToMethod(T* obj, Method method,
803c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple6<P1, P2, P3, P4, P5, P6>& p,
804c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple1<C1>& c) {
805c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (obj->*method)(p.a, p.b, p.c, p.d, p.e, p.f, c.a);
806c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
807c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename Function, typename P1, typename P2, typename P3,
808c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P4, typename P5, typename P6, typename C1>
809c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToFunction(Function function,
810c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple6<P1, P2, P3, P4, P5, P6>& p,
811c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple1<C1>& c) {
812c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (*function)(p.a, p.b, p.c, p.d, p.e, p.f, c.a);
813c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
814c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
815c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 6 - 2
816c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename Method, typename P1, typename P2,
817c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename P5, typename P6, typename C1,
818c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename C2>
819c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToMethod(T* obj, Method method,
820c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple6<P1, P2, P3, P4, P5, P6>& p,
821c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple2<C1, C2>& c) {
822c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (obj->*method)(p.a, p.b, p.c, p.d, p.e, p.f, c.a, c.b);
823c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
824c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename Function, typename P1, typename P2, typename P3,
825c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P4, typename P5, typename P6, typename C1, typename C2>
826c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToFunction(Function function,
827c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple6<P1, P2, P3, P4, P5, P6>& p,
828c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple2<C1, C2>& c) {
829c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (*function)(p.a, p.b, p.c, p.d, p.e, p.f, c.a, c.b);
830c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
831c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
832c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 6 - 3
833c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename Method, typename P1, typename P2,
834c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename P5, typename P6, typename C1,
835c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename C2, typename C3>
836c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToMethod(T* obj, Method method,
837c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple6<P1, P2, P3, P4, P5, P6>& p,
838c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple3<C1, C2, C3>& c) {
839c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (obj->*method)(p.a, p.b, p.c, p.d, p.e, p.f, c.a, c.b, c.c);
840c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
841c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename Function, typename P1, typename P2, typename P3,
842c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P4, typename P5, typename P6, typename C1, typename C2,
843c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename C3>
844c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToFunction(Function function,
845c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple6<P1, P2, P3, P4, P5, P6>& p,
846c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple3<C1, C2, C3>& c) {
847c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (*function)(p.a, p.b, p.c, p.d, p.e, p.f, c.a, c.b, c.c);
848c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
849c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
850c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 6 - 4
851c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename Method, typename P1, typename P2,
852c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename P5, typename P6, typename C1,
853c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename C2, typename C3, typename C4>
854c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToMethod(T* obj, Method method,
855c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple6<P1, P2, P3, P4, P5, P6>& p,
856c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple4<C1, C2, C3, C4>& c) {
857c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (obj->*method)(p.a, p.b, p.c, p.d, p.e, p.f, c.a, c.b, c.c, c.d);
858c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
859c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename Function, typename P1, typename P2, typename P3,
860c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P4, typename P5, typename P6, typename C1, typename C2,
861c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename C3, typename C4>
862c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToFunction(Function function,
863c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple6<P1, P2, P3, P4, P5, P6>& p,
864c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple4<C1, C2, C3, C4>& c) {
865c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (*function)(p.a, p.b, p.c, p.d, p.e, p.f, c.a, c.b, c.c, c.d);
866c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
867c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
868c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 6 - 5
869c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename Method, typename P1, typename P2,
870c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename P5, typename P6, typename C1,
871c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename C2, typename C3, typename C4, typename C5>
872c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToMethod(T* obj, Method method,
873c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple6<P1, P2, P3, P4, P5, P6>& p,
874c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple5<C1, C2, C3, C4, C5>& c) {
875c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (obj->*method)(p.a, p.b, p.c, p.d, p.e, p.f, c.a, c.b, c.c, c.d, c.e);
876c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
877c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename Function, typename P1, typename P2, typename P3,
878c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P4, typename P5, typename P6, typename C1, typename C2,
879c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename C3, typename C4, typename C5>
880c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToFunction(Function function,
881c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple6<P1, P2, P3, P4, P5, P6>& p,
882c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple5<C1, C2, C3, C4, C5>& c) {
883c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (*function)(p.a, p.b, p.c, p.d, p.e, p.f, c.a, c.b, c.c, c.d, c.e);
884c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
885c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
886c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 6 - 6
887c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename Method, typename P1, typename P2,
888c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename P5, typename P6, typename C1,
889c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename C2, typename C3, typename C4, typename C5, typename C6>
890c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToMethod(T* obj, Method method,
891c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple6<P1, P2, P3, P4, P5, P6>& p,
892c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                          const Tuple6<C1, C2, C3, C4, C5, C6>& c) {
893c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (obj->*method)(p.a, p.b, p.c, p.d, p.e, p.f, c.a, c.b, c.c, c.d, c.e, c.f);
894c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
895c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename Function, typename P1, typename P2, typename P3,
896c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P4, typename P5, typename P6, typename C1, typename C2,
897c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename C3, typename C4, typename C5, typename C6>
898c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline R DispatchToFunction(Function function,
899c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple6<P1, P2, P3, P4, P5, P6>& p,
900c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                            const Tuple6<C1, C2, C3, C4, C5, C6>& c) {
901c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return (*function)(p.a, p.b, p.c, p.d, p.e, p.f, c.a, c.b, c.c, c.d, c.e, c.f);
902c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
903c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
904c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Interface that is exposed to the consumer, that does the actual calling
905c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// of the method.
906c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename Params>
907c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass MutantRunner {
908c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
909c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual R RunWithParams(const Params& params) = 0;
910c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual ~MutantRunner() {}
911c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
912c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
913c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Mutant holds pre-bound arguments (like Task). Like Callback
914c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// allows call-time arguments. You bind a pointer to the object
915c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// at creation time.
916c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename Method,
917c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename PreBound, typename Params>
918c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass Mutant : public MutantRunner<R, Params> {
919c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
920c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  Mutant(T* obj, Method method, const PreBound& pb)
921c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      : obj_(obj), method_(method), pb_(pb) {
922c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
923c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
924c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // MutantRunner implementation
925c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual R RunWithParams(const Params& params) {
926c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    return DispatchToMethod<R>(this->obj_, this->method_, pb_, params);
927c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
928c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
929c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  T* obj_;
930c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  Method method_;
931c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  PreBound pb_;
932c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
933c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
934c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename Function, typename PreBound, typename Params>
935c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass MutantFunction : public MutantRunner<R, Params> {
936c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
937c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantFunction(Function function, const PreBound& pb)
938c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      : function_(function), pb_(pb) {
939c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
940c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
941c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // MutantRunner implementation
942c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual R RunWithParams(const Params& params) {
943c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    return DispatchToFunction<R>(function_, pb_, params);
944c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
945c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
946c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  Function function_;
947c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  PreBound pb_;
948c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
949c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
950c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
951c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// MutantLateBind is like Mutant, but you bind a pointer to a pointer
952c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// to the object. This way you can create actions for an object
953c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// that is not yet created (has only storage for a pointer to it).
954c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename Method,
955c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename PreBound, typename Params>
956c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass MutantLateObjectBind : public MutantRunner<R, Params> {
957c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
958c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantLateObjectBind(T** obj, Method method, const PreBound& pb)
959c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      : obj_(obj), method_(method), pb_(pb) {
960c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
961c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
962c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // MutantRunner implementation.
963c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  virtual R RunWithParams(const Params& params) {
964c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    EXPECT_THAT(*this->obj_, testing::NotNull());
965c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    if (NULL == *this->obj_)
966c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      return R();
967c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    return DispatchToMethod<R>( *this->obj_, this->method_, pb_, params);
968c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
969c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
970c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  T** obj_;
971c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  Method method_;
972c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  PreBound pb_;
973c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
974c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif
975c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
976c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Simple MutantRunner<> wrapper acting as a functor.
977c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Redirects operator() to MutantRunner<Params>::Run()
978c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename Params>
979c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochstruct MutantFunctor {
980c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  explicit MutantFunctor(MutantRunner<R, Params>*  cb) : impl_(cb) {
981c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
982c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
983c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ~MutantFunctor() {
984c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
985c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
986c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  inline R operator()() {
987c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    return impl_->RunWithParams(Tuple0());
988c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
989c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
990c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  template <typename Arg1>
991c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  inline R operator()(const Arg1& a) {
992c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    return impl_->RunWithParams(Params(a));
993c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
994c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
995c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  template <typename Arg1, typename Arg2>
996c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  inline R operator()(const Arg1& a, const Arg2& b) {
997c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    return impl_->RunWithParams(Params(a, b));
998c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
999c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1000c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  template <typename Arg1, typename Arg2, typename Arg3>
1001c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  inline R operator()(const Arg1& a, const Arg2& b, const Arg3& c) {
1002c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    return impl_->RunWithParams(Params(a, b, c));
1003c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
1004c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1005c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  template <typename Arg1, typename Arg2, typename Arg3, typename Arg4>
1006c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  inline R operator()(const Arg1& a, const Arg2& b, const Arg3& c,
1007c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         const Arg4& d) {
1008c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    return impl_->RunWithParams(Params(a, b, c, d));
1009c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
1010c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1011c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:
1012c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // We need copy constructor since MutantFunctor is copied few times
1013c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // inside GMock machinery, hence no DISALLOW_EVIL_CONTRUCTORS
1014c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantFunctor();
1015c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  linked_ptr<MutantRunner<R, Params> > impl_;
1016c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
1017c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1018c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 0 - 0
1019c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U>
1020c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple0>
1021c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (U::*method)()) {
1022c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple0>* t =
1023c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (U::*)(),
1024c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple0, Tuple0>
1025c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple());
1026c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple0>(t);
1027c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1028c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1029c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R>
1030c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple0>
1031c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (*function)()) {
1032c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple0>* t =
1033c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (*)(),
1034c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple0, Tuple0>
1035c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple());
1036c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple0>(t);
1037c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1038c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1039c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1040c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U>
1041c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple0>
1042c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (U::*method)()) {
1043c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple0>* t =
1044c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (U::*)(),
1045c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple0, Tuple0>
1046c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple());
1047c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple0>(t);
1048c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1049c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1050c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1051c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined (OS_WIN)
1052c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U>
1053c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple0>
1054c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (__stdcall U::*method)()) {
1055c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple0>* t =
1056c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (__stdcall U::*)(),
1057c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple0, Tuple0>
1058c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple());
1059c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple0>(t);
1060c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1061c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1062c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R>
1063c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple0>
1064c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (__stdcall *function)()) {
1065c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple0>* t =
1066c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (__stdcall *)(),
1067c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple0, Tuple0>
1068c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple());
1069c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple0>(t);
1070c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1071c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1072c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U>
1073c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple0>
1074c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (__stdcall U::*method)()) {
1075c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple0>* t =
1076c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (__stdcall U::*)(),
1077c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple0, Tuple0>
1078c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple());
1079c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple0>(t);
1080c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1081c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1082c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // OS_WIN
1083c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1084c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 0 - 1
1085c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename A1>
1086c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple1<A1> >
1087c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (U::*method)(A1)) {
1088c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple1<A1> >* t =
1089c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (U::*)(A1),
1090c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple0, Tuple1<A1> >
1091c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple());
1092c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple1<A1> >(t);
1093c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1094c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1095c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename A1>
1096c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple1<A1> >
1097c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (*function)(A1)) {
1098c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple1<A1> >* t =
1099c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (*)(A1),
1100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple0, Tuple1<A1> >
1101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple());
1102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple1<A1> >(t);
1103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename A1>
1107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple1<A1> >
1108c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (U::*method)(A1)) {
1109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple1<A1> >* t =
1110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (U::*)(A1),
1111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple0, Tuple1<A1> >
1112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple());
1113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple1<A1> >(t);
1114c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1115c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1116c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1117c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined (OS_WIN)
1118c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename A1>
1119c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple1<A1> >
1120c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (__stdcall U::*method)(A1)) {
1121c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple1<A1> >* t =
1122c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (__stdcall U::*)(A1),
1123c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple0, Tuple1<A1> >
1124c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple());
1125c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple1<A1> >(t);
1126c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1127c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1128c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename A1>
1129c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple1<A1> >
1130c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (__stdcall *function)(A1)) {
1131c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple1<A1> >* t =
1132c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (__stdcall *)(A1),
1133c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple0, Tuple1<A1> >
1134c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple());
1135c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple1<A1> >(t);
1136c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1137c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1138c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename A1>
1139c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple1<A1> >
1140c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (__stdcall U::*method)(A1)) {
1141c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple1<A1> >* t =
1142c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (__stdcall U::*)(A1),
1143c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple0, Tuple1<A1> >
1144c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple());
1145c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple1<A1> >(t);
1146c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1147c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1148c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // OS_WIN
1149c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1150c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 0 - 2
1151c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename A1, typename A2>
1152c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple2<A1, A2> >
1153c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (U::*method)(A1, A2)) {
1154c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple2<A1, A2> >* t =
1155c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (U::*)(A1, A2),
1156c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple0, Tuple2<A1, A2> >
1157c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple());
1158c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple2<A1, A2> >(t);
1159c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1160c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1161c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename A1, typename A2>
1162c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple2<A1, A2> >
1163c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (*function)(A1, A2)) {
1164c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple2<A1, A2> >* t =
1165c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (*)(A1, A2),
1166c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple0, Tuple2<A1, A2> >
1167c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple());
1168c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple2<A1, A2> >(t);
1169c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1170c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1171c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1172c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename A1, typename A2>
1173c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple2<A1, A2> >
1174c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (U::*method)(A1, A2)) {
1175c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple2<A1, A2> >* t =
1176c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (U::*)(A1, A2),
1177c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple0, Tuple2<A1, A2> >
1178c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple());
1179c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple2<A1, A2> >(t);
1180c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1181c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1182c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1183c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined (OS_WIN)
1184c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename A1, typename A2>
1185c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple2<A1, A2> >
1186c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (__stdcall U::*method)(A1, A2)) {
1187c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple2<A1, A2> >* t =
1188c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (__stdcall U::*)(A1, A2),
1189c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple0, Tuple2<A1, A2> >
1190c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple());
1191c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple2<A1, A2> >(t);
1192c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1193c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1194c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename A1, typename A2>
1195c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple2<A1, A2> >
1196c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (__stdcall *function)(A1, A2)) {
1197c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple2<A1, A2> >* t =
1198c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (__stdcall *)(A1, A2),
1199c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple0, Tuple2<A1, A2> >
1200c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple());
1201c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple2<A1, A2> >(t);
1202c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1203c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1204c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename A1, typename A2>
1205c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple2<A1, A2> >
1206c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (__stdcall U::*method)(A1, A2)) {
1207c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple2<A1, A2> >* t =
1208c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (__stdcall U::*)(A1, A2),
1209c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple0, Tuple2<A1, A2> >
1210c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple());
1211c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple2<A1, A2> >(t);
1212c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1213c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1214c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // OS_WIN
1215c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1216c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 0 - 3
1217c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename A1, typename A2,
1218c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A3>
1219c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple3<A1, A2, A3> >
1220c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (U::*method)(A1, A2, A3)) {
1221c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple3<A1, A2, A3> >* t =
1222c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (U::*)(A1, A2, A3),
1223c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple0, Tuple3<A1, A2, A3> >
1224c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple());
1225c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple3<A1, A2, A3> >(t);
1226c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1227c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1228c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename A1, typename A2, typename A3>
1229c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple3<A1, A2, A3> >
1230c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (*function)(A1, A2, A3)) {
1231c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple3<A1, A2, A3> >* t =
1232c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (*)(A1, A2, A3),
1233c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple0, Tuple3<A1, A2, A3> >
1234c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple());
1235c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple3<A1, A2, A3> >(t);
1236c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1237c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1238c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1239c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename A1, typename A2,
1240c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A3>
1241c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple3<A1, A2, A3> >
1242c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (U::*method)(A1, A2, A3)) {
1243c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple3<A1, A2, A3> >* t =
1244c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (U::*)(A1, A2, A3),
1245c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple0, Tuple3<A1, A2, A3> >
1246c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple());
1247c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple3<A1, A2, A3> >(t);
1248c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1249c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1250c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1251c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined (OS_WIN)
1252c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename A1, typename A2,
1253c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A3>
1254c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple3<A1, A2, A3> >
1255c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (__stdcall U::*method)(A1, A2, A3)) {
1256c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple3<A1, A2, A3> >* t =
1257c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (__stdcall U::*)(A1, A2, A3),
1258c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple0, Tuple3<A1, A2, A3> >
1259c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple());
1260c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple3<A1, A2, A3> >(t);
1261c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1262c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1263c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename A1, typename A2, typename A3>
1264c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple3<A1, A2, A3> >
1265c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (__stdcall *function)(A1, A2, A3)) {
1266c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple3<A1, A2, A3> >* t =
1267c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (__stdcall *)(A1, A2, A3),
1268c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple0, Tuple3<A1, A2, A3> >
1269c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple());
1270c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple3<A1, A2, A3> >(t);
1271c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1272c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1273c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename A1, typename A2,
1274c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A3>
1275c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple3<A1, A2, A3> >
1276c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (__stdcall U::*method)(A1, A2, A3)) {
1277c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple3<A1, A2, A3> >* t =
1278c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (__stdcall U::*)(A1, A2, A3),
1279c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple0, Tuple3<A1, A2, A3> >
1280c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple());
1281c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple3<A1, A2, A3> >(t);
1282c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1283c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1284c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // OS_WIN
1285c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1286c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 0 - 4
1287c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename A1, typename A2,
1288c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A3, typename A4>
1289c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple4<A1, A2, A3, A4> >
1290c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (U::*method)(A1, A2, A3, A4)) {
1291c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple4<A1, A2, A3, A4> >* t =
1292c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (U::*)(A1, A2, A3, A4),
1293c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple0, Tuple4<A1, A2, A3, A4> >
1294c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple());
1295c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple4<A1, A2, A3, A4> >(t);
1296c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1297c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1298c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename A1, typename A2, typename A3, typename A4>
1299c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple4<A1, A2, A3, A4> >
1300c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (*function)(A1, A2, A3, A4)) {
1301c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple4<A1, A2, A3, A4> >* t =
1302c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (*)(A1, A2, A3, A4),
1303c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple0, Tuple4<A1, A2, A3, A4> >
1304c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple());
1305c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple4<A1, A2, A3, A4> >(t);
1306c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1307c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1308c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1309c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename A1, typename A2,
1310c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A3, typename A4>
1311c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple4<A1, A2, A3, A4> >
1312c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (U::*method)(A1, A2, A3, A4)) {
1313c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple4<A1, A2, A3, A4> >* t =
1314c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (U::*)(A1, A2, A3, A4),
1315c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple0, Tuple4<A1, A2, A3, A4> >
1316c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple());
1317c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple4<A1, A2, A3, A4> >(t);
1318c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1319c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1320c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1321c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined (OS_WIN)
1322c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename A1, typename A2,
1323c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A3, typename A4>
1324c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple4<A1, A2, A3, A4> >
1325c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (__stdcall U::*method)(A1, A2, A3, A4)) {
1326c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple4<A1, A2, A3, A4> >* t =
1327c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (__stdcall U::*)(A1, A2, A3, A4),
1328c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple0, Tuple4<A1, A2, A3, A4> >
1329c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple());
1330c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple4<A1, A2, A3, A4> >(t);
1331c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1332c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1333c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename A1, typename A2, typename A3, typename A4>
1334c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple4<A1, A2, A3, A4> >
1335c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (__stdcall *function)(A1, A2, A3, A4)) {
1336c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple4<A1, A2, A3, A4> >* t =
1337c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (__stdcall *)(A1, A2, A3, A4),
1338c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple0, Tuple4<A1, A2, A3, A4> >
1339c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple());
1340c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple4<A1, A2, A3, A4> >(t);
1341c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1342c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1343c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename A1, typename A2,
1344c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A3, typename A4>
1345c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple4<A1, A2, A3, A4> >
1346c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (__stdcall U::*method)(A1, A2, A3, A4)) {
1347c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple4<A1, A2, A3, A4> >* t =
1348c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (__stdcall U::*)(A1, A2, A3, A4),
1349c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple0, Tuple4<A1, A2, A3, A4> >
1350c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple());
1351c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple4<A1, A2, A3, A4> >(t);
1352c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1353c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1354c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // OS_WIN
1355c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1356c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 0 - 5
1357c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename A1, typename A2,
1358c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A3, typename A4, typename A5>
1359c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >
1360c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (U::*method)(A1, A2, A3, A4, A5)) {
1361c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple5<A1, A2, A3, A4, A5> >* t =
1362c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (U::*)(A1, A2, A3, A4, A5),
1363c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple0, Tuple5<A1, A2, A3, A4, A5> >
1364c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple());
1365c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >(t);
1366c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1367c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1368c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename A1, typename A2, typename A3, typename A4,
1369c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A5>
1370c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >
1371c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (*function)(A1, A2, A3, A4, A5)) {
1372c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple5<A1, A2, A3, A4, A5> >* t =
1373c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (*)(A1, A2, A3, A4, A5),
1374c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple0, Tuple5<A1, A2, A3, A4, A5> >
1375c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple());
1376c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >(t);
1377c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1378c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1379c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1380c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename A1, typename A2,
1381c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A3, typename A4, typename A5>
1382c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >
1383c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (U::*method)(A1, A2, A3, A4, A5)) {
1384c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple5<A1, A2, A3, A4, A5> >* t =
1385c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (U::*)(A1, A2, A3, A4, A5),
1386c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple0, Tuple5<A1, A2, A3, A4, A5> >
1387c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple());
1388c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >(t);
1389c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1390c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1391c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1392c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined (OS_WIN)
1393c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename A1, typename A2,
1394c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A3, typename A4, typename A5>
1395c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >
1396c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (__stdcall U::*method)(A1, A2, A3, A4, A5)) {
1397c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple5<A1, A2, A3, A4, A5> >* t =
1398c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (__stdcall U::*)(A1, A2, A3, A4, A5),
1399c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple0, Tuple5<A1, A2, A3, A4, A5> >
1400c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple());
1401c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >(t);
1402c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1403c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1404c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename A1, typename A2, typename A3, typename A4,
1405c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A5>
1406c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >
1407c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (__stdcall *function)(A1, A2, A3, A4, A5)) {
1408c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple5<A1, A2, A3, A4, A5> >* t =
1409c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (__stdcall *)(A1, A2, A3, A4, A5),
1410c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple0, Tuple5<A1, A2, A3, A4, A5> >
1411c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple());
1412c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >(t);
1413c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1414c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1415c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename A1, typename A2,
1416c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A3, typename A4, typename A5>
1417c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >
1418c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (__stdcall U::*method)(A1, A2, A3, A4, A5)) {
1419c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple5<A1, A2, A3, A4, A5> >* t =
1420c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (__stdcall U::*)(A1, A2, A3, A4, A5),
1421c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple0, Tuple5<A1, A2, A3, A4, A5> >
1422c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple());
1423c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >(t);
1424c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1425c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1426c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // OS_WIN
1427c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1428c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 0 - 6
1429c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename A1, typename A2,
1430c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A3, typename A4, typename A5, typename A6>
1431c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >
1432c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (U::*method)(A1, A2, A3, A4, A5, A6)) {
1433c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple6<A1, A2, A3, A4, A5, A6> >* t =
1434c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (U::*)(A1, A2, A3, A4, A5, A6),
1435c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple0, Tuple6<A1, A2, A3, A4, A5, A6> >
1436c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple());
1437c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >(t);
1438c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1439c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1440c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename A1, typename A2, typename A3, typename A4,
1441c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A5, typename A6>
1442c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >
1443c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (*function)(A1, A2, A3, A4, A5, A6)) {
1444c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple6<A1, A2, A3, A4, A5, A6> >* t =
1445c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (*)(A1, A2, A3, A4, A5, A6),
1446c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple0, Tuple6<A1, A2, A3, A4, A5, A6> >
1447c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple());
1448c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >(t);
1449c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1450c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1451c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1452c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename A1, typename A2,
1453c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A3, typename A4, typename A5, typename A6>
1454c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >
1455c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (U::*method)(A1, A2, A3, A4, A5, A6)) {
1456c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple6<A1, A2, A3, A4, A5, A6> >* t =
1457c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (U::*)(A1, A2, A3, A4, A5, A6),
1458c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple0, Tuple6<A1, A2, A3, A4, A5, A6> >
1459c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple());
1460c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >(t);
1461c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1462c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1463c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1464c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined (OS_WIN)
1465c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename A1, typename A2,
1466c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A3, typename A4, typename A5, typename A6>
1467c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >
1468c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (__stdcall U::*method)(A1, A2, A3, A4, A5, A6)) {
1469c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple6<A1, A2, A3, A4, A5, A6> >* t =
1470c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (__stdcall U::*)(A1, A2, A3, A4, A5, A6),
1471c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple0, Tuple6<A1, A2, A3, A4, A5, A6> >
1472c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple());
1473c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >(t);
1474c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1475c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1476c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename A1, typename A2, typename A3, typename A4,
1477c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A5, typename A6>
1478c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >
1479c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (__stdcall *function)(A1, A2, A3, A4, A5, A6)) {
1480c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple6<A1, A2, A3, A4, A5, A6> >* t =
1481c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (__stdcall *)(A1, A2, A3, A4, A5, A6),
1482c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple0, Tuple6<A1, A2, A3, A4, A5, A6> >
1483c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple());
1484c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >(t);
1485c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1486c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1487c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename A1, typename A2,
1488c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A3, typename A4, typename A5, typename A6>
1489c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >
1490c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (__stdcall U::*method)(A1, A2, A3, A4, A5, A6)) {
1491c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple6<A1, A2, A3, A4, A5, A6> >* t =
1492c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (__stdcall U::*)(A1, A2, A3, A4, A5, A6),
1493c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple0, Tuple6<A1, A2, A3, A4, A5, A6> >
1494c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple());
1495c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >(t);
1496c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1497c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1498c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // OS_WIN
1499c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1500c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 1 - 0
1501c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename X1>
1502c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple0>
1503c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (U::*method)(X1), const P1& p1) {
1504c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple0>* t =
1505c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (U::*)(X1),
1506c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple1<P1>, Tuple0>
1507c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1));
1508c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple0>(t);
1509c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1510c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1511c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename X1>
1512c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple0>
1513c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (*function)(X1), const P1& p1) {
1514c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple0>* t =
1515c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (*)(X1),
1516c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple1<P1>, Tuple0>
1517c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1));
1518c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple0>(t);
1519c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1520c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1521c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1522c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename X1>
1523c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple0>
1524c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (U::*method)(X1), const P1& p1) {
1525c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple0>* t =
1526c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (U::*)(X1),
1527c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple1<P1>, Tuple0>
1528c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1));
1529c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple0>(t);
1530c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1531c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1532c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1533c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined (OS_WIN)
1534c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename X1>
1535c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple0>
1536c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (__stdcall U::*method)(X1), const P1& p1) {
1537c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple0>* t =
1538c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (__stdcall U::*)(X1),
1539c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple1<P1>, Tuple0>
1540c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1));
1541c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple0>(t);
1542c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1543c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1544c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename X1>
1545c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple0>
1546c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (__stdcall *function)(X1), const P1& p1) {
1547c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple0>* t =
1548c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (__stdcall *)(X1),
1549c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple1<P1>, Tuple0>
1550c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1));
1551c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple0>(t);
1552c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1553c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1554c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename X1>
1555c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple0>
1556c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (__stdcall U::*method)(X1), const P1& p1) {
1557c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple0>* t =
1558c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1),
1559c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple1<P1>, Tuple0>
1560c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1));
1561c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple0>(t);
1562c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1563c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1564c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // OS_WIN
1565c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1566c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 1 - 1
1567c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename A1,
1568c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X1>
1569c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple1<A1> >
1570c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (U::*method)(X1, A1), const P1& p1) {
1571c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple1<A1> >* t =
1572c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (U::*)(X1, A1),
1573c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple1<P1>, Tuple1<A1> >
1574c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1));
1575c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple1<A1> >(t);
1576c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1577c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1578c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename A1, typename X1>
1579c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple1<A1> >
1580c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (*function)(X1, A1), const P1& p1) {
1581c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple1<A1> >* t =
1582c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (*)(X1, A1),
1583c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple1<P1>, Tuple1<A1> >
1584c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1));
1585c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple1<A1> >(t);
1586c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1587c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1588c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1589c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename A1,
1590c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X1>
1591c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple1<A1> >
1592c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (U::*method)(X1, A1), const P1& p1) {
1593c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple1<A1> >* t =
1594c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (U::*)(X1, A1),
1595c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple1<P1>, Tuple1<A1> >
1596c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1));
1597c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple1<A1> >(t);
1598c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1599c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1600c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1601c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined (OS_WIN)
1602c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename A1,
1603c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X1>
1604c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple1<A1> >
1605c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (__stdcall U::*method)(X1, A1), const P1& p1) {
1606c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple1<A1> >* t =
1607c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (__stdcall U::*)(X1, A1),
1608c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple1<P1>, Tuple1<A1> >
1609c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1));
1610c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple1<A1> >(t);
1611c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1612c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1613c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename A1, typename X1>
1614c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple1<A1> >
1615c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (__stdcall *function)(X1, A1), const P1& p1) {
1616c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple1<A1> >* t =
1617c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (__stdcall *)(X1, A1),
1618c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple1<P1>, Tuple1<A1> >
1619c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1));
1620c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple1<A1> >(t);
1621c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1622c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1623c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename A1,
1624c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X1>
1625c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple1<A1> >
1626c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (__stdcall U::*method)(X1, A1), const P1& p1) {
1627c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple1<A1> >* t =
1628c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, A1),
1629c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple1<P1>, Tuple1<A1> >
1630c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1));
1631c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple1<A1> >(t);
1632c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1633c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1634c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // OS_WIN
1635c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1636c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 1 - 2
1637c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename A1,
1638c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A2, typename X1>
1639c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple2<A1, A2> >
1640c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (U::*method)(X1, A1, A2), const P1& p1) {
1641c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple2<A1, A2> >* t =
1642c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (U::*)(X1, A1, A2),
1643c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple1<P1>, Tuple2<A1, A2> >
1644c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1));
1645c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple2<A1, A2> >(t);
1646c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1647c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1648c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename A1, typename A2, typename X1>
1649c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple2<A1, A2> >
1650c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (*function)(X1, A1, A2), const P1& p1) {
1651c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple2<A1, A2> >* t =
1652c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (*)(X1, A1, A2),
1653c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple1<P1>, Tuple2<A1, A2> >
1654c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1));
1655c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple2<A1, A2> >(t);
1656c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1657c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1658c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1659c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename A1,
1660c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A2, typename X1>
1661c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple2<A1, A2> >
1662c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (U::*method)(X1, A1, A2), const P1& p1) {
1663c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple2<A1, A2> >* t =
1664c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (U::*)(X1, A1, A2),
1665c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple1<P1>, Tuple2<A1, A2> >
1666c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1));
1667c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple2<A1, A2> >(t);
1668c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1669c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1670c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1671c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined (OS_WIN)
1672c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename A1,
1673c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A2, typename X1>
1674c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple2<A1, A2> >
1675c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (__stdcall U::*method)(X1, A1, A2), const P1& p1) {
1676c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple2<A1, A2> >* t =
1677c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (__stdcall U::*)(X1, A1, A2),
1678c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple1<P1>, Tuple2<A1, A2> >
1679c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1));
1680c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple2<A1, A2> >(t);
1681c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1682c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1683c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename A1, typename A2, typename X1>
1684c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple2<A1, A2> >
1685c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (__stdcall *function)(X1, A1, A2), const P1& p1) {
1686c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple2<A1, A2> >* t =
1687c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (__stdcall *)(X1, A1, A2),
1688c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple1<P1>, Tuple2<A1, A2> >
1689c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1));
1690c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple2<A1, A2> >(t);
1691c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1692c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1693c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename A1,
1694c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A2, typename X1>
1695c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple2<A1, A2> >
1696c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (__stdcall U::*method)(X1, A1, A2), const P1& p1) {
1697c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple2<A1, A2> >* t =
1698c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, A1, A2),
1699c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple1<P1>, Tuple2<A1, A2> >
1700c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1));
1701c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple2<A1, A2> >(t);
1702c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1703c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1704c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // OS_WIN
1705c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1706c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 1 - 3
1707c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename A1,
1708c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A2, typename A3, typename X1>
1709c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple3<A1, A2, A3> >
1710c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (U::*method)(X1, A1, A2, A3), const P1& p1) {
1711c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple3<A1, A2, A3> >* t =
1712c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (U::*)(X1, A1, A2, A3),
1713c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple1<P1>, Tuple3<A1, A2, A3> >
1714c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1));
1715c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple3<A1, A2, A3> >(t);
1716c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1717c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1718c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename A1, typename A2, typename A3,
1719c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X1>
1720c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple3<A1, A2, A3> >
1721c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (*function)(X1, A1, A2, A3), const P1& p1) {
1722c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple3<A1, A2, A3> >* t =
1723c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (*)(X1, A1, A2, A3),
1724c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple1<P1>, Tuple3<A1, A2, A3> >
1725c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1));
1726c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple3<A1, A2, A3> >(t);
1727c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1728c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1729c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1730c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename A1,
1731c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A2, typename A3, typename X1>
1732c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple3<A1, A2, A3> >
1733c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (U::*method)(X1, A1, A2, A3), const P1& p1) {
1734c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple3<A1, A2, A3> >* t =
1735c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (U::*)(X1, A1, A2, A3),
1736c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple1<P1>, Tuple3<A1, A2, A3> >
1737c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1));
1738c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple3<A1, A2, A3> >(t);
1739c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1740c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1741c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1742c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined (OS_WIN)
1743c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename A1,
1744c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A2, typename A3, typename X1>
1745c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple3<A1, A2, A3> >
1746c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (__stdcall U::*method)(X1, A1, A2, A3), const P1& p1) {
1747c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple3<A1, A2, A3> >* t =
1748c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (__stdcall U::*)(X1, A1, A2, A3),
1749c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple1<P1>, Tuple3<A1, A2, A3> >
1750c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1));
1751c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple3<A1, A2, A3> >(t);
1752c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1753c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1754c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename A1, typename A2, typename A3,
1755c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X1>
1756c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple3<A1, A2, A3> >
1757c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (__stdcall *function)(X1, A1, A2, A3), const P1& p1) {
1758c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple3<A1, A2, A3> >* t =
1759c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (__stdcall *)(X1, A1, A2, A3),
1760c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple1<P1>, Tuple3<A1, A2, A3> >
1761c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1));
1762c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple3<A1, A2, A3> >(t);
1763c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1764c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1765c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename A1,
1766c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A2, typename A3, typename X1>
1767c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple3<A1, A2, A3> >
1768c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (__stdcall U::*method)(X1, A1, A2, A3), const P1& p1) {
1769c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple3<A1, A2, A3> >* t =
1770c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, A1, A2, A3),
1771c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple1<P1>, Tuple3<A1, A2, A3> >
1772c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1));
1773c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple3<A1, A2, A3> >(t);
1774c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1775c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1776c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // OS_WIN
1777c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1778c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 1 - 4
1779c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename A1,
1780c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A2, typename A3, typename A4, typename X1>
1781c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple4<A1, A2, A3, A4> >
1782c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (U::*method)(X1, A1, A2, A3, A4), const P1& p1) {
1783c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple4<A1, A2, A3, A4> >* t =
1784c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (U::*)(X1, A1, A2, A3, A4),
1785c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple1<P1>, Tuple4<A1, A2, A3, A4> >
1786c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1));
1787c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple4<A1, A2, A3, A4> >(t);
1788c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1789c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1790c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename A1, typename A2, typename A3,
1791c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A4, typename X1>
1792c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple4<A1, A2, A3, A4> >
1793c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (*function)(X1, A1, A2, A3, A4), const P1& p1) {
1794c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple4<A1, A2, A3, A4> >* t =
1795c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (*)(X1, A1, A2, A3, A4),
1796c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple1<P1>, Tuple4<A1, A2, A3, A4> >
1797c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1));
1798c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple4<A1, A2, A3, A4> >(t);
1799c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1800c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1801c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1802c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename A1,
1803c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A2, typename A3, typename A4, typename X1>
1804c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple4<A1, A2, A3, A4> >
1805c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (U::*method)(X1, A1, A2, A3, A4), const P1& p1) {
1806c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple4<A1, A2, A3, A4> >* t =
1807c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (U::*)(X1, A1, A2, A3, A4),
1808c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple1<P1>, Tuple4<A1, A2, A3, A4> >
1809c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1));
1810c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple4<A1, A2, A3, A4> >(t);
1811c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1812c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1813c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1814c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined (OS_WIN)
1815c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename A1,
1816c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A2, typename A3, typename A4, typename X1>
1817c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple4<A1, A2, A3, A4> >
1818c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (__stdcall U::*method)(X1, A1, A2, A3, A4),
1819c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1) {
1820c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple4<A1, A2, A3, A4> >* t =
1821c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (__stdcall U::*)(X1, A1, A2, A3, A4),
1822c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple1<P1>, Tuple4<A1, A2, A3, A4> >
1823c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1));
1824c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple4<A1, A2, A3, A4> >(t);
1825c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1826c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1827c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename A1, typename A2, typename A3,
1828c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A4, typename X1>
1829c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple4<A1, A2, A3, A4> >
1830c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (__stdcall *function)(X1, A1, A2, A3, A4), const P1& p1) {
1831c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple4<A1, A2, A3, A4> >* t =
1832c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (__stdcall *)(X1, A1, A2, A3, A4),
1833c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple1<P1>, Tuple4<A1, A2, A3, A4> >
1834c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1));
1835c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple4<A1, A2, A3, A4> >(t);
1836c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1837c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1838c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename A1,
1839c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A2, typename A3, typename A4, typename X1>
1840c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple4<A1, A2, A3, A4> >
1841c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (__stdcall U::*method)(X1, A1, A2, A3, A4),
1842c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1) {
1843c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple4<A1, A2, A3, A4> >* t =
1844c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, A1, A2, A3, A4),
1845c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple1<P1>, Tuple4<A1, A2, A3, A4> >
1846c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1));
1847c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple4<A1, A2, A3, A4> >(t);
1848c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1849c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1850c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // OS_WIN
1851c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1852c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 1 - 5
1853c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename A1,
1854c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A2, typename A3, typename A4, typename A5, typename X1>
1855c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >
1856c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (U::*method)(X1, A1, A2, A3, A4, A5), const P1& p1) {
1857c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple5<A1, A2, A3, A4, A5> >* t =
1858c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (U::*)(X1, A1, A2, A3, A4, A5),
1859c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple1<P1>, Tuple5<A1, A2, A3, A4, A5> >
1860c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1));
1861c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >(t);
1862c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1863c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1864c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename A1, typename A2, typename A3,
1865c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A4, typename A5, typename X1>
1866c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >
1867c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (*function)(X1, A1, A2, A3, A4, A5), const P1& p1) {
1868c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple5<A1, A2, A3, A4, A5> >* t =
1869c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (*)(X1, A1, A2, A3, A4, A5),
1870c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple1<P1>, Tuple5<A1, A2, A3, A4, A5> >
1871c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1));
1872c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >(t);
1873c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1874c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1875c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1876c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename A1,
1877c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A2, typename A3, typename A4, typename A5, typename X1>
1878c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >
1879c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (U::*method)(X1, A1, A2, A3, A4, A5), const P1& p1) {
1880c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple5<A1, A2, A3, A4, A5> >* t =
1881c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (U::*)(X1, A1, A2, A3, A4, A5),
1882c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple1<P1>, Tuple5<A1, A2, A3, A4, A5> >
1883c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1));
1884c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >(t);
1885c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1886c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1887c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1888c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined (OS_WIN)
1889c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename A1,
1890c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A2, typename A3, typename A4, typename A5, typename X1>
1891c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >
1892c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (__stdcall U::*method)(X1, A1, A2, A3, A4, A5),
1893c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1) {
1894c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple5<A1, A2, A3, A4, A5> >* t =
1895c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (__stdcall U::*)(X1, A1, A2, A3, A4, A5),
1896c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple1<P1>, Tuple5<A1, A2, A3, A4, A5> >
1897c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1));
1898c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >(t);
1899c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1900c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1901c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename A1, typename A2, typename A3,
1902c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A4, typename A5, typename X1>
1903c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >
1904c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (__stdcall *function)(X1, A1, A2, A3, A4, A5), const P1& p1) {
1905c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple5<A1, A2, A3, A4, A5> >* t =
1906c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (__stdcall *)(X1, A1, A2, A3, A4, A5),
1907c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple1<P1>, Tuple5<A1, A2, A3, A4, A5> >
1908c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1));
1909c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >(t);
1910c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1911c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1912c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename A1,
1913c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A2, typename A3, typename A4, typename A5, typename X1>
1914c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >
1915c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (__stdcall U::*method)(X1, A1, A2, A3, A4, A5),
1916c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1) {
1917c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple5<A1, A2, A3, A4, A5> >* t =
1918c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, A1, A2, A3, A4, A5),
1919c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple1<P1>, Tuple5<A1, A2, A3, A4, A5> >
1920c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1));
1921c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >(t);
1922c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1923c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1924c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // OS_WIN
1925c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1926c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 1 - 6
1927c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename A1,
1928c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A2, typename A3, typename A4, typename A5, typename A6,
1929c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X1>
1930c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >
1931c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (U::*method)(X1, A1, A2, A3, A4, A5, A6),
1932c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1) {
1933c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple6<A1, A2, A3, A4, A5, A6> >* t =
1934c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (U::*)(X1, A1, A2, A3, A4, A5, A6),
1935c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple1<P1>, Tuple6<A1, A2, A3, A4, A5, A6> >
1936c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1));
1937c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >(t);
1938c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1939c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1940c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename A1, typename A2, typename A3,
1941c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A4, typename A5, typename A6, typename X1>
1942c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >
1943c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (*function)(X1, A1, A2, A3, A4, A5, A6), const P1& p1) {
1944c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple6<A1, A2, A3, A4, A5, A6> >* t =
1945c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (*)(X1, A1, A2, A3, A4, A5, A6),
1946c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple1<P1>, Tuple6<A1, A2, A3, A4, A5, A6> >
1947c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1));
1948c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >(t);
1949c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1950c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1951c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1952c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename A1,
1953c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A2, typename A3, typename A4, typename A5, typename A6,
1954c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X1>
1955c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >
1956c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (U::*method)(X1, A1, A2, A3, A4, A5, A6),
1957c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1) {
1958c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple6<A1, A2, A3, A4, A5, A6> >* t =
1959c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (U::*)(X1, A1, A2, A3, A4, A5, A6),
1960c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple1<P1>, Tuple6<A1, A2, A3, A4, A5, A6> >
1961c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1));
1962c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >(t);
1963c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1964c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1965c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1966c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined (OS_WIN)
1967c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename A1,
1968c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A2, typename A3, typename A4, typename A5, typename A6,
1969c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X1>
1970c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >
1971c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (__stdcall U::*method)(X1, A1, A2, A3, A4, A5, A6),
1972c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1) {
1973c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple6<A1, A2, A3, A4, A5, A6> >* t =
1974c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (__stdcall U::*)(X1, A1, A2, A3, A4, A5, A6),
1975c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple1<P1>, Tuple6<A1, A2, A3, A4, A5, A6> >
1976c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1));
1977c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >(t);
1978c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1979c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
1980c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename A1, typename A2, typename A3,
1981c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A4, typename A5, typename A6, typename X1>
1982c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >
1983c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (__stdcall *function)(X1, A1, A2, A3, A4, A5, A6),
1984c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1) {
1985c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple6<A1, A2, A3, A4, A5, A6> >* t =
1986c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (__stdcall *)(X1, A1, A2, A3, A4, A5, A6),
1987c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple1<P1>, Tuple6<A1, A2, A3, A4, A5, A6> >
1988c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1));
1989c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >(t);
1990c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
1991c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
1992c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename A1,
1993c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A2, typename A3, typename A4, typename A5, typename A6,
1994c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X1>
1995c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >
1996c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (__stdcall U::*method)(X1, A1, A2, A3, A4, A5, A6),
1997c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1) {
1998c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple6<A1, A2, A3, A4, A5, A6> >* t =
1999c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, A1, A2, A3, A4, A5, A6),
2000c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple1<P1>, Tuple6<A1, A2, A3, A4, A5, A6> >
2001c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1));
2002c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >(t);
2003c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
2004c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2005c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // OS_WIN
2006c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2007c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 2 - 0
2008c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
2009c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X1, typename X2>
2010c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple0>
2011c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (U::*method)(X1, X2), const P1& p1, const P2& p2) {
2012c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple0>* t =
2013c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (U::*)(X1, X2),
2014c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple2<P1, P2>, Tuple0>
2015c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2));
2016c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple0>(t);
2017c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
2018c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2019c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename P2, typename X1, typename X2>
2020c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple0>
2021c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (*function)(X1, X2), const P1& p1, const P2& p2) {
2022c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple0>* t =
2023c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (*)(X1, X2),
2024c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple2<P1, P2>, Tuple0>
2025c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1, p2));
2026c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple0>(t);
2027c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
2028c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2029c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2030c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
2031c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X1, typename X2>
2032c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple0>
2033c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (U::*method)(X1, X2), const P1& p1, const P2& p2) {
2034c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple0>* t =
2035c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (U::*)(X1, X2),
2036c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple2<P1, P2>, Tuple0>
2037c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2));
2038c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple0>(t);
2039c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
2040c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2041c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2042c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined (OS_WIN)
2043c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
2044c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X1, typename X2>
2045c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple0>
2046c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2), const P1& p1,
2047c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2) {
2048c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple0>* t =
2049c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (__stdcall U::*)(X1, X2),
2050c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple2<P1, P2>, Tuple0>
2051c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2));
2052c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple0>(t);
2053c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
2054c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2055c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename P2, typename X1, typename X2>
2056c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple0>
2057c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (__stdcall *function)(X1, X2), const P1& p1, const P2& p2) {
2058c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple0>* t =
2059c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (__stdcall *)(X1, X2),
2060c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple2<P1, P2>, Tuple0>
2061c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1, p2));
2062c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple0>(t);
2063c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
2064c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2065c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
2066c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X1, typename X2>
2067c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple0>
2068c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2), const P1& p1,
2069c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2) {
2070c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple0>* t =
2071c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2),
2072c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple2<P1, P2>, Tuple0>
2073c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2));
2074c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple0>(t);
2075c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
2076c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2077c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // OS_WIN
2078c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2079c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 2 - 1
2080c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
2081c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A1, typename X1, typename X2>
2082c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple1<A1> >
2083c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (U::*method)(X1, X2, A1), const P1& p1, const P2& p2) {
2084c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple1<A1> >* t =
2085c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (U::*)(X1, X2, A1),
2086c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple2<P1, P2>, Tuple1<A1> >
2087c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2));
2088c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple1<A1> >(t);
2089c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
2090c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2091c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename P2, typename A1, typename X1,
2092c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X2>
2093c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple1<A1> >
2094c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (*function)(X1, X2, A1), const P1& p1, const P2& p2) {
2095c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple1<A1> >* t =
2096c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (*)(X1, X2, A1),
2097c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple2<P1, P2>, Tuple1<A1> >
2098c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1, p2));
2099c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple1<A1> >(t);
2100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
2101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
2104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A1, typename X1, typename X2>
2105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple1<A1> >
2106c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (U::*method)(X1, X2, A1), const P1& p1, const P2& p2) {
2107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple1<A1> >* t =
2108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (U::*)(X1, X2, A1),
2109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple2<P1, P2>, Tuple1<A1> >
2110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2));
2111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple1<A1> >(t);
2112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
2113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2114c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2115c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined (OS_WIN)
2116c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
2117c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A1, typename X1, typename X2>
2118c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple1<A1> >
2119c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, A1), const P1& p1,
2120c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2) {
2121c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple1<A1> >* t =
2122c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (__stdcall U::*)(X1, X2, A1),
2123c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple2<P1, P2>, Tuple1<A1> >
2124c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2));
2125c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple1<A1> >(t);
2126c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
2127c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2128c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename P2, typename A1, typename X1,
2129c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X2>
2130c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple1<A1> >
2131c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (__stdcall *function)(X1, X2, A1), const P1& p1,
2132c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2) {
2133c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple1<A1> >* t =
2134c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (__stdcall *)(X1, X2, A1),
2135c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple2<P1, P2>, Tuple1<A1> >
2136c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1, p2));
2137c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple1<A1> >(t);
2138c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
2139c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2140c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
2141c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A1, typename X1, typename X2>
2142c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple1<A1> >
2143c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, A1), const P1& p1,
2144c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2) {
2145c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple1<A1> >* t =
2146c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, A1),
2147c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple2<P1, P2>, Tuple1<A1> >
2148c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2));
2149c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple1<A1> >(t);
2150c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
2151c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2152c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // OS_WIN
2153c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2154c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 2 - 2
2155c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
2156c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A1, typename A2, typename X1, typename X2>
2157c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple2<A1, A2> >
2158c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (U::*method)(X1, X2, A1, A2), const P1& p1,
2159c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2) {
2160c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple2<A1, A2> >* t =
2161c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (U::*)(X1, X2, A1, A2),
2162c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple2<P1, P2>, Tuple2<A1, A2> >
2163c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2));
2164c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple2<A1, A2> >(t);
2165c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
2166c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2167c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename P2, typename A1, typename A2,
2168c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X1, typename X2>
2169c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple2<A1, A2> >
2170c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (*function)(X1, X2, A1, A2), const P1& p1, const P2& p2) {
2171c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple2<A1, A2> >* t =
2172c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (*)(X1, X2, A1, A2),
2173c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple2<P1, P2>, Tuple2<A1, A2> >
2174c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1, p2));
2175c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple2<A1, A2> >(t);
2176c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
2177c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2178c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2179c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
2180c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A1, typename A2, typename X1, typename X2>
2181c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple2<A1, A2> >
2182c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (U::*method)(X1, X2, A1, A2), const P1& p1,
2183c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2) {
2184c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple2<A1, A2> >* t =
2185c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (U::*)(X1, X2, A1, A2),
2186c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple2<P1, P2>, Tuple2<A1, A2> >
2187c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2));
2188c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple2<A1, A2> >(t);
2189c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
2190c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2191c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2192c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined (OS_WIN)
2193c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
2194c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A1, typename A2, typename X1, typename X2>
2195c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple2<A1, A2> >
2196c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, A1, A2), const P1& p1,
2197c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2) {
2198c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple2<A1, A2> >* t =
2199c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (__stdcall U::*)(X1, X2, A1, A2),
2200c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple2<P1, P2>, Tuple2<A1, A2> >
2201c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2));
2202c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple2<A1, A2> >(t);
2203c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
2204c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2205c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename P2, typename A1, typename A2,
2206c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X1, typename X2>
2207c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple2<A1, A2> >
2208c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (__stdcall *function)(X1, X2, A1, A2), const P1& p1,
2209c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2) {
2210c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple2<A1, A2> >* t =
2211c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (__stdcall *)(X1, X2, A1, A2),
2212c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple2<P1, P2>, Tuple2<A1, A2> >
2213c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1, p2));
2214c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple2<A1, A2> >(t);
2215c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
2216c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2217c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
2218c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A1, typename A2, typename X1, typename X2>
2219c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple2<A1, A2> >
2220c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, A1, A2), const P1& p1,
2221c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2) {
2222c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple2<A1, A2> >* t =
2223c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, A1, A2),
2224c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple2<P1, P2>, Tuple2<A1, A2> >
2225c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2));
2226c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple2<A1, A2> >(t);
2227c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
2228c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2229c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // OS_WIN
2230c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2231c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 2 - 3
2232c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
2233c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A1, typename A2, typename A3, typename X1, typename X2>
2234c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple3<A1, A2, A3> >
2235c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (U::*method)(X1, X2, A1, A2, A3), const P1& p1,
2236c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2) {
2237c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple3<A1, A2, A3> >* t =
2238c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (U::*)(X1, X2, A1, A2, A3),
2239c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple2<P1, P2>, Tuple3<A1, A2, A3> >
2240c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2));
2241c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple3<A1, A2, A3> >(t);
2242c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
2243c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2244c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename P2, typename A1, typename A2,
2245c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A3, typename X1, typename X2>
2246c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple3<A1, A2, A3> >
2247c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (*function)(X1, X2, A1, A2, A3), const P1& p1, const P2& p2) {
2248c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple3<A1, A2, A3> >* t =
2249c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (*)(X1, X2, A1, A2, A3),
2250c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple2<P1, P2>, Tuple3<A1, A2, A3> >
2251c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1, p2));
2252c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple3<A1, A2, A3> >(t);
2253c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
2254c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2255c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2256c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
2257c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A1, typename A2, typename A3, typename X1, typename X2>
2258c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple3<A1, A2, A3> >
2259c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (U::*method)(X1, X2, A1, A2, A3), const P1& p1,
2260c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2) {
2261c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple3<A1, A2, A3> >* t =
2262c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (U::*)(X1, X2, A1, A2, A3),
2263c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple2<P1, P2>, Tuple3<A1, A2, A3> >
2264c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2));
2265c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple3<A1, A2, A3> >(t);
2266c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
2267c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2268c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2269c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined (OS_WIN)
2270c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
2271c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A1, typename A2, typename A3, typename X1, typename X2>
2272c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple3<A1, A2, A3> >
2273c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, A1, A2, A3),
2274c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2) {
2275c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple3<A1, A2, A3> >* t =
2276c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (__stdcall U::*)(X1, X2, A1, A2, A3),
2277c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple2<P1, P2>, Tuple3<A1, A2, A3> >
2278c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2));
2279c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple3<A1, A2, A3> >(t);
2280c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
2281c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2282c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename P2, typename A1, typename A2,
2283c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A3, typename X1, typename X2>
2284c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple3<A1, A2, A3> >
2285c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (__stdcall *function)(X1, X2, A1, A2, A3), const P1& p1,
2286c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2) {
2287c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple3<A1, A2, A3> >* t =
2288c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (__stdcall *)(X1, X2, A1, A2, A3),
2289c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple2<P1, P2>, Tuple3<A1, A2, A3> >
2290c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1, p2));
2291c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple3<A1, A2, A3> >(t);
2292c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
2293c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2294c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
2295c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A1, typename A2, typename A3, typename X1, typename X2>
2296c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple3<A1, A2, A3> >
2297c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, A1, A2, A3),
2298c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2) {
2299c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple3<A1, A2, A3> >* t =
2300c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, A1, A2, A3),
2301c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple2<P1, P2>, Tuple3<A1, A2, A3> >
2302c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2));
2303c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple3<A1, A2, A3> >(t);
2304c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
2305c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2306c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // OS_WIN
2307c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2308c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 2 - 4
2309c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
2310c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A1, typename A2, typename A3, typename A4, typename X1,
2311c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X2>
2312c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple4<A1, A2, A3, A4> >
2313c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (U::*method)(X1, X2, A1, A2, A3, A4), const P1& p1,
2314c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2) {
2315c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple4<A1, A2, A3, A4> >* t =
2316c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (U::*)(X1, X2, A1, A2, A3, A4),
2317c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple2<P1, P2>, Tuple4<A1, A2, A3, A4> >
2318c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2));
2319c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple4<A1, A2, A3, A4> >(t);
2320c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
2321c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2322c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename P2, typename A1, typename A2,
2323c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A3, typename A4, typename X1, typename X2>
2324c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple4<A1, A2, A3, A4> >
2325c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (*function)(X1, X2, A1, A2, A3, A4), const P1& p1,
2326c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2) {
2327c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple4<A1, A2, A3, A4> >* t =
2328c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (*)(X1, X2, A1, A2, A3, A4),
2329c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple2<P1, P2>, Tuple4<A1, A2, A3, A4> >
2330c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1, p2));
2331c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple4<A1, A2, A3, A4> >(t);
2332c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
2333c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2334c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2335c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
2336c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A1, typename A2, typename A3, typename A4, typename X1,
2337c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X2>
2338c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple4<A1, A2, A3, A4> >
2339c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (U::*method)(X1, X2, A1, A2, A3, A4), const P1& p1,
2340c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2) {
2341c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple4<A1, A2, A3, A4> >* t =
2342c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (U::*)(X1, X2, A1, A2, A3, A4),
2343c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple2<P1, P2>, Tuple4<A1, A2, A3, A4> >
2344c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2));
2345c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple4<A1, A2, A3, A4> >(t);
2346c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
2347c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2348c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2349c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined (OS_WIN)
2350c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
2351c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A1, typename A2, typename A3, typename A4, typename X1,
2352c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X2>
2353c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple4<A1, A2, A3, A4> >
2354c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, A1, A2, A3, A4),
2355c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2) {
2356c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple4<A1, A2, A3, A4> >* t =
2357c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (__stdcall U::*)(X1, X2, A1, A2, A3, A4),
2358c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple2<P1, P2>, Tuple4<A1, A2, A3, A4> >
2359c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2));
2360c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple4<A1, A2, A3, A4> >(t);
2361c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
2362c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2363c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename P2, typename A1, typename A2,
2364c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A3, typename A4, typename X1, typename X2>
2365c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple4<A1, A2, A3, A4> >
2366c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (__stdcall *function)(X1, X2, A1, A2, A3, A4), const P1& p1,
2367c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2) {
2368c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple4<A1, A2, A3, A4> >* t =
2369c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (__stdcall *)(X1, X2, A1, A2, A3, A4),
2370c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple2<P1, P2>, Tuple4<A1, A2, A3, A4> >
2371c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1, p2));
2372c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple4<A1, A2, A3, A4> >(t);
2373c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
2374c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2375c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
2376c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A1, typename A2, typename A3, typename A4, typename X1,
2377c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X2>
2378c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple4<A1, A2, A3, A4> >
2379c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, A1, A2, A3, A4),
2380c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2) {
2381c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple4<A1, A2, A3, A4> >* t =
2382c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, A1, A2, A3, A4),
2383c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple2<P1, P2>, Tuple4<A1, A2, A3, A4> >
2384c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2));
2385c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple4<A1, A2, A3, A4> >(t);
2386c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
2387c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2388c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // OS_WIN
2389c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2390c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 2 - 5
2391c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
2392c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A1, typename A2, typename A3, typename A4, typename A5,
2393c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X1, typename X2>
2394c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >
2395c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (U::*method)(X1, X2, A1, A2, A3, A4, A5), const P1& p1,
2396c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2) {
2397c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple5<A1, A2, A3, A4, A5> >* t =
2398c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (U::*)(X1, X2, A1, A2, A3, A4, A5),
2399c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple2<P1, P2>, Tuple5<A1, A2, A3, A4, A5> >
2400c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2));
2401c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >(t);
2402c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
2403c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2404c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename P2, typename A1, typename A2,
2405c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A3, typename A4, typename A5, typename X1, typename X2>
2406c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >
2407c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (*function)(X1, X2, A1, A2, A3, A4, A5), const P1& p1,
2408c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2) {
2409c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple5<A1, A2, A3, A4, A5> >* t =
2410c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (*)(X1, X2, A1, A2, A3, A4, A5),
2411c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple2<P1, P2>, Tuple5<A1, A2, A3, A4, A5> >
2412c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1, p2));
2413c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >(t);
2414c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
2415c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2416c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2417c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
2418c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A1, typename A2, typename A3, typename A4, typename A5,
2419c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X1, typename X2>
2420c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >
2421c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (U::*method)(X1, X2, A1, A2, A3, A4, A5), const P1& p1,
2422c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2) {
2423c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple5<A1, A2, A3, A4, A5> >* t =
2424c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (U::*)(X1, X2, A1, A2, A3, A4, A5),
2425c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple2<P1, P2>, Tuple5<A1, A2, A3, A4, A5> >
2426c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2));
2427c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >(t);
2428c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
2429c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2430c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2431c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined (OS_WIN)
2432c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
2433c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A1, typename A2, typename A3, typename A4, typename A5,
2434c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X1, typename X2>
2435c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >
2436c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, A1, A2, A3, A4, A5),
2437c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2) {
2438c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple5<A1, A2, A3, A4, A5> >* t =
2439c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (__stdcall U::*)(X1, X2, A1, A2, A3, A4, A5),
2440c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple2<P1, P2>, Tuple5<A1, A2, A3, A4, A5> >
2441c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2));
2442c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >(t);
2443c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
2444c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2445c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename P2, typename A1, typename A2,
2446c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A3, typename A4, typename A5, typename X1, typename X2>
2447c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >
2448c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (__stdcall *function)(X1, X2, A1, A2, A3, A4, A5), const P1& p1,
2449c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2) {
2450c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple5<A1, A2, A3, A4, A5> >* t =
2451c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (__stdcall *)(X1, X2, A1, A2, A3, A4, A5),
2452c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple2<P1, P2>, Tuple5<A1, A2, A3, A4, A5> >
2453c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1, p2));
2454c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >(t);
2455c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
2456c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2457c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
2458c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A1, typename A2, typename A3, typename A4, typename A5,
2459c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X1, typename X2>
2460c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >
2461c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, A1, A2, A3, A4, A5),
2462c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2) {
2463c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple5<A1, A2, A3, A4, A5> >* t =
2464c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, A1, A2, A3, A4, A5),
2465c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple2<P1, P2>, Tuple5<A1, A2, A3, A4, A5> >
2466c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2));
2467c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >(t);
2468c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
2469c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2470c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // OS_WIN
2471c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2472c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 2 - 6
2473c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
2474c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A1, typename A2, typename A3, typename A4, typename A5,
2475c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A6, typename X1, typename X2>
2476c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >
2477c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (U::*method)(X1, X2, A1, A2, A3, A4, A5, A6),
2478c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2) {
2479c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple6<A1, A2, A3, A4, A5, A6> >* t =
2480c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (U::*)(X1, X2, A1, A2, A3, A4, A5, A6),
2481c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple2<P1, P2>, Tuple6<A1, A2, A3, A4, A5, A6> >
2482c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2));
2483c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >(t);
2484c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
2485c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2486c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename P2, typename A1, typename A2,
2487c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A3, typename A4, typename A5, typename A6, typename X1,
2488c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X2>
2489c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >
2490c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (*function)(X1, X2, A1, A2, A3, A4, A5, A6), const P1& p1,
2491c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2) {
2492c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple6<A1, A2, A3, A4, A5, A6> >* t =
2493c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (*)(X1, X2, A1, A2, A3, A4, A5, A6),
2494c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple2<P1, P2>, Tuple6<A1, A2, A3, A4, A5, A6> >
2495c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1, p2));
2496c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >(t);
2497c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
2498c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2499c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2500c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
2501c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A1, typename A2, typename A3, typename A4, typename A5,
2502c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A6, typename X1, typename X2>
2503c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >
2504c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (U::*method)(X1, X2, A1, A2, A3, A4, A5, A6),
2505c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2) {
2506c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple6<A1, A2, A3, A4, A5, A6> >* t =
2507c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (U::*)(X1, X2, A1, A2, A3, A4, A5, A6),
2508c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple2<P1, P2>, Tuple6<A1, A2, A3, A4, A5, A6> >
2509c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2));
2510c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >(t);
2511c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
2512c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2513c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2514c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined (OS_WIN)
2515c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
2516c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A1, typename A2, typename A3, typename A4, typename A5,
2517c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A6, typename X1, typename X2>
2518c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >
2519c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, A1, A2, A3, A4, A5, A6),
2520c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2) {
2521c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple6<A1, A2, A3, A4, A5, A6> >* t =
2522c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (__stdcall U::*)(X1, X2, A1, A2, A3, A4, A5, A6),
2523c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple2<P1, P2>, Tuple6<A1, A2, A3, A4, A5, A6> >
2524c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2));
2525c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >(t);
2526c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
2527c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2528c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename P2, typename A1, typename A2,
2529c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A3, typename A4, typename A5, typename A6, typename X1,
2530c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X2>
2531c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >
2532c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (__stdcall *function)(X1, X2, A1, A2, A3, A4, A5, A6),
2533c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2) {
2534c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple6<A1, A2, A3, A4, A5, A6> >* t =
2535c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (__stdcall *)(X1, X2, A1, A2, A3, A4, A5, A6),
2536c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple2<P1, P2>, Tuple6<A1, A2, A3, A4, A5, A6> >
2537c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1, p2));
2538c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >(t);
2539c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
2540c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2541c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
2542c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A1, typename A2, typename A3, typename A4, typename A5,
2543c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A6, typename X1, typename X2>
2544c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >
2545c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, A1, A2, A3, A4, A5, A6),
2546c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2) {
2547c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple6<A1, A2, A3, A4, A5, A6> >* t =
2548c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, A1, A2, A3, A4, A5, A6),
2549c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple2<P1, P2>, Tuple6<A1, A2, A3, A4, A5, A6> >
2550c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2));
2551c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >(t);
2552c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
2553c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2554c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // OS_WIN
2555c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2556c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 3 - 0
2557c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
2558c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename X1, typename X2, typename X3>
2559c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple0>
2560c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (U::*method)(X1, X2, X3), const P1& p1, const P2& p2,
2561c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P3& p3) {
2562c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple0>* t =
2563c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (U::*)(X1, X2, X3),
2564c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple3<P1, P2, P3>, Tuple0>
2565c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3));
2566c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple0>(t);
2567c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
2568c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2569c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename P2, typename P3, typename X1,
2570c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X2, typename X3>
2571c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple0>
2572c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (*function)(X1, X2, X3), const P1& p1, const P2& p2,
2573c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P3& p3) {
2574c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple0>* t =
2575c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (*)(X1, X2, X3),
2576c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple3<P1, P2, P3>, Tuple0>
2577c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1, p2, p3));
2578c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple0>(t);
2579c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
2580c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2581c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2582c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
2583c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename X1, typename X2, typename X3>
2584c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple0>
2585c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (U::*method)(X1, X2, X3), const P1& p1, const P2& p2,
2586c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P3& p3) {
2587c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple0>* t =
2588c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3),
2589c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple3<P1, P2, P3>, Tuple0>
2590c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3));
2591c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple0>(t);
2592c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
2593c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2594c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2595c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined (OS_WIN)
2596c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
2597c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename X1, typename X2, typename X3>
2598c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple0>
2599c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3), const P1& p1,
2600c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2, const P3& p3) {
2601c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple0>* t =
2602c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3),
2603c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple3<P1, P2, P3>, Tuple0>
2604c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3));
2605c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple0>(t);
2606c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
2607c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2608c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename P2, typename P3, typename X1,
2609c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X2, typename X3>
2610c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple0>
2611c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (__stdcall *function)(X1, X2, X3), const P1& p1, const P2& p2,
2612c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P3& p3) {
2613c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple0>* t =
2614c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (__stdcall *)(X1, X2, X3),
2615c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple3<P1, P2, P3>, Tuple0>
2616c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1, p2, p3));
2617c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple0>(t);
2618c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
2619c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2620c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
2621c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename X1, typename X2, typename X3>
2622c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple0>
2623c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3), const P1& p1,
2624c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2, const P3& p3) {
2625c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple0>* t =
2626c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3),
2627c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple3<P1, P2, P3>, Tuple0>
2628c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3));
2629c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple0>(t);
2630c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
2631c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2632c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // OS_WIN
2633c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2634c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 3 - 1
2635c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
2636c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename A1, typename X1, typename X2, typename X3>
2637c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple1<A1> >
2638c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (U::*method)(X1, X2, X3, A1), const P1& p1,
2639c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2, const P3& p3) {
2640c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple1<A1> >* t =
2641c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (U::*)(X1, X2, X3, A1),
2642c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple3<P1, P2, P3>, Tuple1<A1> >
2643c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3));
2644c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple1<A1> >(t);
2645c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
2646c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2647c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename P2, typename P3, typename A1,
2648c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X1, typename X2, typename X3>
2649c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple1<A1> >
2650c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (*function)(X1, X2, X3, A1), const P1& p1, const P2& p2,
2651c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P3& p3) {
2652c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple1<A1> >* t =
2653c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (*)(X1, X2, X3, A1),
2654c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple3<P1, P2, P3>, Tuple1<A1> >
2655c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1, p2, p3));
2656c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple1<A1> >(t);
2657c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
2658c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2659c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2660c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
2661c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename A1, typename X1, typename X2, typename X3>
2662c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple1<A1> >
2663c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (U::*method)(X1, X2, X3, A1), const P1& p1,
2664c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2, const P3& p3) {
2665c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple1<A1> >* t =
2666c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, A1),
2667c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple3<P1, P2, P3>, Tuple1<A1> >
2668c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3));
2669c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple1<A1> >(t);
2670c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
2671c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2672c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2673c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined (OS_WIN)
2674c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
2675c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename A1, typename X1, typename X2, typename X3>
2676c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple1<A1> >
2677c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, A1), const P1& p1,
2678c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2, const P3& p3) {
2679c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple1<A1> >* t =
2680c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, A1),
2681c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple3<P1, P2, P3>, Tuple1<A1> >
2682c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3));
2683c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple1<A1> >(t);
2684c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
2685c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2686c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename P2, typename P3, typename A1,
2687c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X1, typename X2, typename X3>
2688c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple1<A1> >
2689c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (__stdcall *function)(X1, X2, X3, A1), const P1& p1,
2690c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2, const P3& p3) {
2691c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple1<A1> >* t =
2692c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (__stdcall *)(X1, X2, X3, A1),
2693c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple3<P1, P2, P3>, Tuple1<A1> >
2694c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1, p2, p3));
2695c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple1<A1> >(t);
2696c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
2697c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2698c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
2699c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename A1, typename X1, typename X2, typename X3>
2700c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple1<A1> >
2701c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, A1), const P1& p1,
2702c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2, const P3& p3) {
2703c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple1<A1> >* t =
2704c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, A1),
2705c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple3<P1, P2, P3>, Tuple1<A1> >
2706c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3));
2707c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple1<A1> >(t);
2708c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
2709c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2710c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // OS_WIN
2711c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2712c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 3 - 2
2713c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
2714c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename A1, typename A2, typename X1, typename X2,
2715c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X3>
2716c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple2<A1, A2> >
2717c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (U::*method)(X1, X2, X3, A1, A2), const P1& p1,
2718c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2, const P3& p3) {
2719c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple2<A1, A2> >* t =
2720c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (U::*)(X1, X2, X3, A1, A2),
2721c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple3<P1, P2, P3>, Tuple2<A1, A2> >
2722c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3));
2723c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple2<A1, A2> >(t);
2724c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
2725c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2726c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename P2, typename P3, typename A1,
2727c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A2, typename X1, typename X2, typename X3>
2728c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple2<A1, A2> >
2729c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (*function)(X1, X2, X3, A1, A2), const P1& p1, const P2& p2,
2730c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P3& p3) {
2731c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple2<A1, A2> >* t =
2732c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (*)(X1, X2, X3, A1, A2),
2733c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple3<P1, P2, P3>, Tuple2<A1, A2> >
2734c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1, p2, p3));
2735c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple2<A1, A2> >(t);
2736c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
2737c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2738c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2739c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
2740c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename A1, typename A2, typename X1, typename X2,
2741c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X3>
2742c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple2<A1, A2> >
2743c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (U::*method)(X1, X2, X3, A1, A2), const P1& p1,
2744c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2, const P3& p3) {
2745c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple2<A1, A2> >* t =
2746c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, A1, A2),
2747c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple3<P1, P2, P3>, Tuple2<A1, A2> >
2748c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3));
2749c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple2<A1, A2> >(t);
2750c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
2751c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2752c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2753c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined (OS_WIN)
2754c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
2755c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename A1, typename A2, typename X1, typename X2,
2756c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X3>
2757c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple2<A1, A2> >
2758c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, A1, A2),
2759c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2, const P3& p3) {
2760c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple2<A1, A2> >* t =
2761c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, A1, A2),
2762c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple3<P1, P2, P3>, Tuple2<A1, A2> >
2763c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3));
2764c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple2<A1, A2> >(t);
2765c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
2766c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2767c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename P2, typename P3, typename A1,
2768c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A2, typename X1, typename X2, typename X3>
2769c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple2<A1, A2> >
2770c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (__stdcall *function)(X1, X2, X3, A1, A2), const P1& p1,
2771c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2, const P3& p3) {
2772c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple2<A1, A2> >* t =
2773c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (__stdcall *)(X1, X2, X3, A1, A2),
2774c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple3<P1, P2, P3>, Tuple2<A1, A2> >
2775c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1, p2, p3));
2776c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple2<A1, A2> >(t);
2777c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
2778c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2779c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
2780c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename A1, typename A2, typename X1, typename X2,
2781c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X3>
2782c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple2<A1, A2> >
2783c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, A1, A2),
2784c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2, const P3& p3) {
2785c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple2<A1, A2> >* t =
2786c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, A1, A2),
2787c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple3<P1, P2, P3>, Tuple2<A1, A2> >
2788c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3));
2789c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple2<A1, A2> >(t);
2790c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
2791c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2792c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // OS_WIN
2793c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2794c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 3 - 3
2795c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
2796c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename A1, typename A2, typename A3, typename X1,
2797c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X2, typename X3>
2798c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple3<A1, A2, A3> >
2799c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (U::*method)(X1, X2, X3, A1, A2, A3), const P1& p1,
2800c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2, const P3& p3) {
2801c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple3<A1, A2, A3> >* t =
2802c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (U::*)(X1, X2, X3, A1, A2, A3),
2803c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple3<P1, P2, P3>, Tuple3<A1, A2, A3> >
2804c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3));
2805c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple3<A1, A2, A3> >(t);
2806c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
2807c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2808c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename P2, typename P3, typename A1,
2809c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A2, typename A3, typename X1, typename X2, typename X3>
2810c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple3<A1, A2, A3> >
2811c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (*function)(X1, X2, X3, A1, A2, A3), const P1& p1, const P2& p2,
2812c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P3& p3) {
2813c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple3<A1, A2, A3> >* t =
2814c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (*)(X1, X2, X3, A1, A2, A3),
2815c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple3<P1, P2, P3>, Tuple3<A1, A2, A3> >
2816c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1, p2, p3));
2817c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple3<A1, A2, A3> >(t);
2818c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
2819c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2820c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2821c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
2822c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename A1, typename A2, typename A3, typename X1,
2823c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X2, typename X3>
2824c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple3<A1, A2, A3> >
2825c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (U::*method)(X1, X2, X3, A1, A2, A3), const P1& p1,
2826c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2, const P3& p3) {
2827c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple3<A1, A2, A3> >* t =
2828c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, A1, A2, A3),
2829c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple3<P1, P2, P3>, Tuple3<A1, A2, A3> >
2830c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3));
2831c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple3<A1, A2, A3> >(t);
2832c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
2833c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2834c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2835c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined (OS_WIN)
2836c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
2837c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename A1, typename A2, typename A3, typename X1,
2838c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X2, typename X3>
2839c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple3<A1, A2, A3> >
2840c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, A1, A2, A3),
2841c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2, const P3& p3) {
2842c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple3<A1, A2, A3> >* t =
2843c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, A1, A2, A3),
2844c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple3<P1, P2, P3>, Tuple3<A1, A2, A3> >
2845c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3));
2846c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple3<A1, A2, A3> >(t);
2847c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
2848c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2849c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename P2, typename P3, typename A1,
2850c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A2, typename A3, typename X1, typename X2, typename X3>
2851c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple3<A1, A2, A3> >
2852c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (__stdcall *function)(X1, X2, X3, A1, A2, A3), const P1& p1,
2853c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2, const P3& p3) {
2854c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple3<A1, A2, A3> >* t =
2855c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (__stdcall *)(X1, X2, X3, A1, A2, A3),
2856c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple3<P1, P2, P3>, Tuple3<A1, A2, A3> >
2857c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1, p2, p3));
2858c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple3<A1, A2, A3> >(t);
2859c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
2860c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2861c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
2862c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename A1, typename A2, typename A3, typename X1,
2863c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X2, typename X3>
2864c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple3<A1, A2, A3> >
2865c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, A1, A2, A3),
2866c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2, const P3& p3) {
2867c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple3<A1, A2, A3> >* t =
2868c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, A1, A2, A3),
2869c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple3<P1, P2, P3>, Tuple3<A1, A2, A3> >
2870c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3));
2871c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple3<A1, A2, A3> >(t);
2872c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
2873c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2874c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // OS_WIN
2875c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2876c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 3 - 4
2877c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
2878c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename A1, typename A2, typename A3, typename A4,
2879c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X1, typename X2, typename X3>
2880c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple4<A1, A2, A3, A4> >
2881c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (U::*method)(X1, X2, X3, A1, A2, A3, A4), const P1& p1,
2882c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2, const P3& p3) {
2883c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple4<A1, A2, A3, A4> >* t =
2884c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (U::*)(X1, X2, X3, A1, A2, A3, A4),
2885c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple3<P1, P2, P3>, Tuple4<A1, A2, A3, A4> >
2886c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3));
2887c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple4<A1, A2, A3, A4> >(t);
2888c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
2889c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2890c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename P2, typename P3, typename A1,
2891c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A2, typename A3, typename A4, typename X1, typename X2,
2892c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X3>
2893c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple4<A1, A2, A3, A4> >
2894c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (*function)(X1, X2, X3, A1, A2, A3, A4), const P1& p1,
2895c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2, const P3& p3) {
2896c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple4<A1, A2, A3, A4> >* t =
2897c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (*)(X1, X2, X3, A1, A2, A3, A4),
2898c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple3<P1, P2, P3>, Tuple4<A1, A2, A3, A4> >
2899c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1, p2, p3));
2900c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple4<A1, A2, A3, A4> >(t);
2901c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
2902c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2903c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2904c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
2905c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename A1, typename A2, typename A3, typename A4,
2906c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X1, typename X2, typename X3>
2907c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple4<A1, A2, A3, A4> >
2908c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (U::*method)(X1, X2, X3, A1, A2, A3, A4), const P1& p1,
2909c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2, const P3& p3) {
2910c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple4<A1, A2, A3, A4> >* t =
2911c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, A1, A2, A3, A4),
2912c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple3<P1, P2, P3>, Tuple4<A1, A2, A3, A4> >
2913c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3));
2914c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple4<A1, A2, A3, A4> >(t);
2915c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
2916c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2917c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2918c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined (OS_WIN)
2919c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
2920c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename A1, typename A2, typename A3, typename A4,
2921c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X1, typename X2, typename X3>
2922c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple4<A1, A2, A3, A4> >
2923c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, A1, A2, A3, A4),
2924c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2, const P3& p3) {
2925c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple4<A1, A2, A3, A4> >* t =
2926c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, A1, A2, A3, A4),
2927c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple3<P1, P2, P3>, Tuple4<A1, A2, A3, A4> >
2928c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3));
2929c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple4<A1, A2, A3, A4> >(t);
2930c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
2931c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2932c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename P2, typename P3, typename A1,
2933c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A2, typename A3, typename A4, typename X1, typename X2,
2934c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X3>
2935c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple4<A1, A2, A3, A4> >
2936c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (__stdcall *function)(X1, X2, X3, A1, A2, A3, A4), const P1& p1,
2937c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2, const P3& p3) {
2938c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple4<A1, A2, A3, A4> >* t =
2939c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (__stdcall *)(X1, X2, X3, A1, A2, A3, A4),
2940c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple3<P1, P2, P3>, Tuple4<A1, A2, A3, A4> >
2941c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1, p2, p3));
2942c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple4<A1, A2, A3, A4> >(t);
2943c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
2944c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2945c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
2946c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename A1, typename A2, typename A3, typename A4,
2947c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X1, typename X2, typename X3>
2948c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple4<A1, A2, A3, A4> >
2949c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, A1, A2, A3, A4),
2950c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2, const P3& p3) {
2951c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple4<A1, A2, A3, A4> >* t =
2952c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, A1, A2, A3, A4),
2953c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple3<P1, P2, P3>, Tuple4<A1, A2, A3, A4> >
2954c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3));
2955c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple4<A1, A2, A3, A4> >(t);
2956c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
2957c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2958c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // OS_WIN
2959c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2960c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 3 - 5
2961c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
2962c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename A1, typename A2, typename A3, typename A4,
2963c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A5, typename X1, typename X2, typename X3>
2964c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >
2965c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (U::*method)(X1, X2, X3, A1, A2, A3, A4, A5),
2966c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2, const P3& p3) {
2967c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple5<A1, A2, A3, A4, A5> >* t =
2968c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (U::*)(X1, X2, X3, A1, A2, A3, A4, A5),
2969c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple3<P1, P2, P3>, Tuple5<A1, A2, A3, A4, A5> >
2970c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3));
2971c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >(t);
2972c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
2973c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2974c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename P2, typename P3, typename A1,
2975c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A2, typename A3, typename A4, typename A5, typename X1,
2976c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X2, typename X3>
2977c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >
2978c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (*function)(X1, X2, X3, A1, A2, A3, A4, A5), const P1& p1,
2979c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2, const P3& p3) {
2980c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple5<A1, A2, A3, A4, A5> >* t =
2981c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (*)(X1, X2, X3, A1, A2, A3, A4, A5),
2982c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple3<P1, P2, P3>, Tuple5<A1, A2, A3, A4, A5> >
2983c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1, p2, p3));
2984c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >(t);
2985c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
2986c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
2987c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
2988c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
2989c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename A1, typename A2, typename A3, typename A4,
2990c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A5, typename X1, typename X2, typename X3>
2991c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >
2992c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (U::*method)(X1, X2, X3, A1, A2, A3, A4, A5),
2993c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2, const P3& p3) {
2994c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple5<A1, A2, A3, A4, A5> >* t =
2995c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, A1, A2, A3, A4, A5),
2996c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple3<P1, P2, P3>, Tuple5<A1, A2, A3, A4, A5> >
2997c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3));
2998c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >(t);
2999c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
3000c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3001c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
3002c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined (OS_WIN)
3003c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
3004c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename A1, typename A2, typename A3, typename A4,
3005c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A5, typename X1, typename X2, typename X3>
3006c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >
3007c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, A1, A2, A3, A4, A5),
3008c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2, const P3& p3) {
3009c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple5<A1, A2, A3, A4, A5> >* t =
3010c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, A1, A2, A3, A4, A5),
3011c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple3<P1, P2, P3>, Tuple5<A1, A2, A3, A4, A5> >
3012c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3));
3013c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >(t);
3014c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
3015c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
3016c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename P2, typename P3, typename A1,
3017c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A2, typename A3, typename A4, typename A5, typename X1,
3018c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X2, typename X3>
3019c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >
3020c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (__stdcall *function)(X1, X2, X3, A1, A2, A3, A4, A5),
3021c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2, const P3& p3) {
3022c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple5<A1, A2, A3, A4, A5> >* t =
3023c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (__stdcall *)(X1, X2, X3, A1, A2, A3, A4, A5),
3024c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple3<P1, P2, P3>, Tuple5<A1, A2, A3, A4, A5> >
3025c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1, p2, p3));
3026c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >(t);
3027c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
3028c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3029c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
3030c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename A1, typename A2, typename A3, typename A4,
3031c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A5, typename X1, typename X2, typename X3>
3032c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >
3033c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, A1, A2, A3, A4, A5),
3034c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2, const P3& p3) {
3035c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple5<A1, A2, A3, A4, A5> >* t =
3036c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, A1, A2, A3, A4, A5),
3037c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple3<P1, P2, P3>, Tuple5<A1, A2, A3, A4, A5> >
3038c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3));
3039c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >(t);
3040c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
3041c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3042c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // OS_WIN
3043c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
3044c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 3 - 6
3045c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
3046c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename A1, typename A2, typename A3, typename A4,
3047c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A5, typename A6, typename X1, typename X2, typename X3>
3048c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >
3049c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (U::*method)(X1, X2, X3, A1, A2, A3, A4, A5, A6),
3050c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2, const P3& p3) {
3051c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple6<A1, A2, A3, A4, A5, A6> >* t =
3052c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (U::*)(X1, X2, X3, A1, A2, A3, A4, A5, A6),
3053c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple3<P1, P2, P3>, Tuple6<A1, A2, A3, A4, A5, A6> >
3054c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3));
3055c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >(t);
3056c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
3057c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
3058c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename P2, typename P3, typename A1,
3059c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A2, typename A3, typename A4, typename A5, typename A6,
3060c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X1, typename X2, typename X3>
3061c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >
3062c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (*function)(X1, X2, X3, A1, A2, A3, A4, A5, A6), const P1& p1,
3063c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2, const P3& p3) {
3064c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple6<A1, A2, A3, A4, A5, A6> >* t =
3065c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (*)(X1, X2, X3, A1, A2, A3, A4, A5, A6),
3066c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple3<P1, P2, P3>, Tuple6<A1, A2, A3, A4, A5, A6> >
3067c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1, p2, p3));
3068c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >(t);
3069c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
3070c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
3071c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3072c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
3073c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename A1, typename A2, typename A3, typename A4,
3074c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A5, typename A6, typename X1, typename X2, typename X3>
3075c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >
3076c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (U::*method)(X1, X2, X3, A1, A2, A3, A4, A5, A6),
3077c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2, const P3& p3) {
3078c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple6<A1, A2, A3, A4, A5, A6> >* t =
3079c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, A1, A2, A3, A4, A5, A6),
3080c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple3<P1, P2, P3>, Tuple6<A1, A2, A3, A4, A5, A6> >
3081c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3));
3082c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >(t);
3083c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
3084c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3085c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
3086c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined (OS_WIN)
3087c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
3088c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename A1, typename A2, typename A3, typename A4,
3089c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A5, typename A6, typename X1, typename X2, typename X3>
3090c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >
3091c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, A1, A2, A3, A4, A5,
3092c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    A6), const P1& p1, const P2& p2, const P3& p3) {
3093c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple6<A1, A2, A3, A4, A5, A6> >* t =
3094c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, A1, A2, A3, A4, A5, A6),
3095c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple3<P1, P2, P3>, Tuple6<A1, A2, A3, A4, A5, A6> >
3096c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3));
3097c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >(t);
3098c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
3099c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
3100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename P2, typename P3, typename A1,
3101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A2, typename A3, typename A4, typename A5, typename A6,
3102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X1, typename X2, typename X3>
3103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >
3104c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (__stdcall *function)(X1, X2, X3, A1, A2, A3, A4, A5, A6),
3105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2, const P3& p3) {
3106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple6<A1, A2, A3, A4, A5, A6> >* t =
3107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (__stdcall *)(X1, X2, X3, A1, A2, A3, A4, A5, A6),
3108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple3<P1, P2, P3>, Tuple6<A1, A2, A3, A4, A5, A6> >
3109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1, p2, p3));
3110c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >(t);
3111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
3112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
3114c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename A1, typename A2, typename A3, typename A4,
3115c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A5, typename A6, typename X1, typename X2, typename X3>
3116c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >
3117c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, A1, A2, A3, A4, A5,
3118c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    A6), const P1& p1, const P2& p2, const P3& p3) {
3119c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple6<A1, A2, A3, A4, A5, A6> >* t =
3120c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, A1, A2, A3, A4, A5, A6),
3121c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple3<P1, P2, P3>, Tuple6<A1, A2, A3, A4, A5, A6> >
3122c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3));
3123c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >(t);
3124c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
3125c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3126c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // OS_WIN
3127c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
3128c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 4 - 0
3129c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
3130c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename X1, typename X2, typename X3,
3131c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X4>
3132c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple0>
3133c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4), const P1& p1,
3134c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2, const P3& p3, const P4& p4) {
3135c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple0>* t =
3136c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (U::*)(X1, X2, X3, X4),
3137c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple4<P1, P2, P3, P4>, Tuple0>
3138c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4));
3139c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple0>(t);
3140c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
3141c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
3142c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename P2, typename P3, typename P4,
3143c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X1, typename X2, typename X3, typename X4>
3144c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple0>
3145c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (*function)(X1, X2, X3, X4), const P1& p1, const P2& p2,
3146c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P3& p3, const P4& p4) {
3147c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple0>* t =
3148c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (*)(X1, X2, X3, X4),
3149c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple4<P1, P2, P3, P4>, Tuple0>
3150c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1, p2, p3, p4));
3151c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple0>(t);
3152c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
3153c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
3154c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3155c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
3156c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename X1, typename X2, typename X3,
3157c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X4>
3158c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple0>
3159c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4), const P1& p1,
3160c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2, const P3& p3, const P4& p4) {
3161c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple0>* t =
3162c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4),
3163c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple4<P1, P2, P3, P4>, Tuple0>
3164c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4));
3165c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple0>(t);
3166c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
3167c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3168c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
3169c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined (OS_WIN)
3170c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
3171c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename X1, typename X2, typename X3,
3172c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X4>
3173c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple0>
3174c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4), const P1& p1,
3175c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2, const P3& p3, const P4& p4) {
3176c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple0>* t =
3177c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4),
3178c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple4<P1, P2, P3, P4>, Tuple0>
3179c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4));
3180c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple0>(t);
3181c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
3182c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
3183c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename P2, typename P3, typename P4,
3184c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X1, typename X2, typename X3, typename X4>
3185c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple0>
3186c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (__stdcall *function)(X1, X2, X3, X4), const P1& p1,
3187c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2, const P3& p3, const P4& p4) {
3188c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple0>* t =
3189c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4),
3190c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple4<P1, P2, P3, P4>, Tuple0>
3191c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1, p2, p3, p4));
3192c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple0>(t);
3193c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
3194c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3195c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
3196c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename X1, typename X2, typename X3,
3197c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X4>
3198c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple0>
3199c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4), const P1& p1,
3200c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2, const P3& p3, const P4& p4) {
3201c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple0>* t =
3202c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4),
3203c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple4<P1, P2, P3, P4>, Tuple0>
3204c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4));
3205c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple0>(t);
3206c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
3207c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3208c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // OS_WIN
3209c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
3210c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 4 - 1
3211c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
3212c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename A1, typename X1, typename X2,
3213c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X3, typename X4>
3214c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple1<A1> >
3215c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, A1), const P1& p1,
3216c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2, const P3& p3, const P4& p4) {
3217c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple1<A1> >* t =
3218c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (U::*)(X1, X2, X3, X4, A1),
3219c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple4<P1, P2, P3, P4>, Tuple1<A1> >
3220c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4));
3221c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple1<A1> >(t);
3222c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
3223c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
3224c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename P2, typename P3, typename P4,
3225c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A1, typename X1, typename X2, typename X3, typename X4>
3226c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple1<A1> >
3227c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (*function)(X1, X2, X3, X4, A1), const P1& p1, const P2& p2,
3228c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P3& p3, const P4& p4) {
3229c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple1<A1> >* t =
3230c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (*)(X1, X2, X3, X4, A1),
3231c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple4<P1, P2, P3, P4>, Tuple1<A1> >
3232c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1, p2, p3, p4));
3233c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple1<A1> >(t);
3234c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
3235c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
3236c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3237c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
3238c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename A1, typename X1, typename X2,
3239c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X3, typename X4>
3240c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple1<A1> >
3241c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, A1), const P1& p1,
3242c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2, const P3& p3, const P4& p4) {
3243c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple1<A1> >* t =
3244c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, A1),
3245c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple4<P1, P2, P3, P4>, Tuple1<A1> >
3246c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4));
3247c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple1<A1> >(t);
3248c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
3249c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3250c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
3251c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined (OS_WIN)
3252c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
3253c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename A1, typename X1, typename X2,
3254c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X3, typename X4>
3255c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple1<A1> >
3256c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, A1),
3257c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
3258c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple1<A1> >* t =
3259c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, A1),
3260c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple4<P1, P2, P3, P4>, Tuple1<A1> >
3261c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4));
3262c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple1<A1> >(t);
3263c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
3264c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
3265c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename P2, typename P3, typename P4,
3266c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A1, typename X1, typename X2, typename X3, typename X4>
3267c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple1<A1> >
3268c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, A1), const P1& p1,
3269c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2, const P3& p3, const P4& p4) {
3270c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple1<A1> >* t =
3271c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, A1),
3272c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple4<P1, P2, P3, P4>, Tuple1<A1> >
3273c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1, p2, p3, p4));
3274c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple1<A1> >(t);
3275c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
3276c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3277c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
3278c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename A1, typename X1, typename X2,
3279c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X3, typename X4>
3280c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple1<A1> >
3281c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, A1),
3282c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
3283c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple1<A1> >* t =
3284c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, A1),
3285c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple4<P1, P2, P3, P4>, Tuple1<A1> >
3286c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4));
3287c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple1<A1> >(t);
3288c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
3289c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3290c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // OS_WIN
3291c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
3292c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 4 - 2
3293c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
3294c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename A1, typename A2, typename X1,
3295c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X2, typename X3, typename X4>
3296c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple2<A1, A2> >
3297c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, A1, A2), const P1& p1,
3298c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2, const P3& p3, const P4& p4) {
3299c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple2<A1, A2> >* t =
3300c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (U::*)(X1, X2, X3, X4, A1, A2),
3301c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple4<P1, P2, P3, P4>, Tuple2<A1, A2> >
3302c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4));
3303c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple2<A1, A2> >(t);
3304c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
3305c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
3306c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename P2, typename P3, typename P4,
3307c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A1, typename A2, typename X1, typename X2, typename X3,
3308c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X4>
3309c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple2<A1, A2> >
3310c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (*function)(X1, X2, X3, X4, A1, A2), const P1& p1, const P2& p2,
3311c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P3& p3, const P4& p4) {
3312c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple2<A1, A2> >* t =
3313c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (*)(X1, X2, X3, X4, A1, A2),
3314c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple4<P1, P2, P3, P4>, Tuple2<A1, A2> >
3315c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1, p2, p3, p4));
3316c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple2<A1, A2> >(t);
3317c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
3318c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
3319c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3320c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
3321c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename A1, typename A2, typename X1,
3322c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X2, typename X3, typename X4>
3323c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple2<A1, A2> >
3324c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, A1, A2), const P1& p1,
3325c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2, const P3& p3, const P4& p4) {
3326c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple2<A1, A2> >* t =
3327c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, A1, A2),
3328c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple4<P1, P2, P3, P4>, Tuple2<A1, A2> >
3329c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4));
3330c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple2<A1, A2> >(t);
3331c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
3332c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3333c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
3334c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined (OS_WIN)
3335c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
3336c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename A1, typename A2, typename X1,
3337c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X2, typename X3, typename X4>
3338c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple2<A1, A2> >
3339c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, A1, A2),
3340c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
3341c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple2<A1, A2> >* t =
3342c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, A1, A2),
3343c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple4<P1, P2, P3, P4>, Tuple2<A1, A2> >
3344c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4));
3345c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple2<A1, A2> >(t);
3346c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
3347c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
3348c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename P2, typename P3, typename P4,
3349c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A1, typename A2, typename X1, typename X2, typename X3,
3350c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X4>
3351c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple2<A1, A2> >
3352c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, A1, A2), const P1& p1,
3353c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2, const P3& p3, const P4& p4) {
3354c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple2<A1, A2> >* t =
3355c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, A1, A2),
3356c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple4<P1, P2, P3, P4>, Tuple2<A1, A2> >
3357c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1, p2, p3, p4));
3358c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple2<A1, A2> >(t);
3359c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
3360c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3361c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
3362c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename A1, typename A2, typename X1,
3363c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X2, typename X3, typename X4>
3364c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple2<A1, A2> >
3365c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, A1, A2),
3366c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
3367c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple2<A1, A2> >* t =
3368c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, A1, A2),
3369c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple4<P1, P2, P3, P4>, Tuple2<A1, A2> >
3370c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4));
3371c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple2<A1, A2> >(t);
3372c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
3373c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3374c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // OS_WIN
3375c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
3376c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 4 - 3
3377c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
3378c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename A1, typename A2, typename A3,
3379c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X1, typename X2, typename X3, typename X4>
3380c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple3<A1, A2, A3> >
3381c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, A1, A2, A3), const P1& p1,
3382c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2, const P3& p3, const P4& p4) {
3383c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple3<A1, A2, A3> >* t =
3384c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (U::*)(X1, X2, X3, X4, A1, A2, A3),
3385c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple4<P1, P2, P3, P4>, Tuple3<A1, A2, A3> >
3386c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4));
3387c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple3<A1, A2, A3> >(t);
3388c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
3389c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
3390c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename P2, typename P3, typename P4,
3391c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A1, typename A2, typename A3, typename X1, typename X2,
3392c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X3, typename X4>
3393c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple3<A1, A2, A3> >
3394c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (*function)(X1, X2, X3, X4, A1, A2, A3), const P1& p1,
3395c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2, const P3& p3, const P4& p4) {
3396c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple3<A1, A2, A3> >* t =
3397c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (*)(X1, X2, X3, X4, A1, A2, A3),
3398c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple4<P1, P2, P3, P4>, Tuple3<A1, A2, A3> >
3399c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1, p2, p3, p4));
3400c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple3<A1, A2, A3> >(t);
3401c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
3402c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
3403c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3404c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
3405c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename A1, typename A2, typename A3,
3406c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X1, typename X2, typename X3, typename X4>
3407c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple3<A1, A2, A3> >
3408c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, A1, A2, A3), const P1& p1,
3409c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2, const P3& p3, const P4& p4) {
3410c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple3<A1, A2, A3> >* t =
3411c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, A1, A2, A3),
3412c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple4<P1, P2, P3, P4>, Tuple3<A1, A2, A3> >
3413c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4));
3414c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple3<A1, A2, A3> >(t);
3415c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
3416c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3417c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
3418c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined (OS_WIN)
3419c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
3420c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename A1, typename A2, typename A3,
3421c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X1, typename X2, typename X3, typename X4>
3422c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple3<A1, A2, A3> >
3423c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, A1, A2, A3),
3424c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
3425c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple3<A1, A2, A3> >* t =
3426c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, A1, A2, A3),
3427c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple4<P1, P2, P3, P4>, Tuple3<A1, A2, A3> >
3428c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4));
3429c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple3<A1, A2, A3> >(t);
3430c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
3431c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
3432c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename P2, typename P3, typename P4,
3433c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A1, typename A2, typename A3, typename X1, typename X2,
3434c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X3, typename X4>
3435c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple3<A1, A2, A3> >
3436c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, A1, A2, A3), const P1& p1,
3437c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2, const P3& p3, const P4& p4) {
3438c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple3<A1, A2, A3> >* t =
3439c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, A1, A2, A3),
3440c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple4<P1, P2, P3, P4>, Tuple3<A1, A2, A3> >
3441c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1, p2, p3, p4));
3442c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple3<A1, A2, A3> >(t);
3443c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
3444c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3445c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
3446c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename A1, typename A2, typename A3,
3447c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X1, typename X2, typename X3, typename X4>
3448c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple3<A1, A2, A3> >
3449c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, A1, A2, A3),
3450c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
3451c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple3<A1, A2, A3> >* t =
3452c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, A1, A2, A3),
3453c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple4<P1, P2, P3, P4>, Tuple3<A1, A2, A3> >
3454c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4));
3455c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple3<A1, A2, A3> >(t);
3456c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
3457c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3458c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // OS_WIN
3459c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
3460c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 4 - 4
3461c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
3462c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename A1, typename A2, typename A3,
3463c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A4, typename X1, typename X2, typename X3, typename X4>
3464c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple4<A1, A2, A3, A4> >
3465c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, A1, A2, A3, A4),
3466c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
3467c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple4<A1, A2, A3, A4> >* t =
3468c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (U::*)(X1, X2, X3, X4, A1, A2, A3, A4),
3469c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple4<P1, P2, P3, P4>, Tuple4<A1, A2, A3, A4> >
3470c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4));
3471c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple4<A1, A2, A3, A4> >(t);
3472c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
3473c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
3474c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename P2, typename P3, typename P4,
3475c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A1, typename A2, typename A3, typename A4, typename X1,
3476c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X2, typename X3, typename X4>
3477c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple4<A1, A2, A3, A4> >
3478c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (*function)(X1, X2, X3, X4, A1, A2, A3, A4), const P1& p1,
3479c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2, const P3& p3, const P4& p4) {
3480c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple4<A1, A2, A3, A4> >* t =
3481c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (*)(X1, X2, X3, X4, A1, A2, A3, A4),
3482c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple4<P1, P2, P3, P4>, Tuple4<A1, A2, A3, A4> >
3483c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1, p2, p3, p4));
3484c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple4<A1, A2, A3, A4> >(t);
3485c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
3486c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
3487c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3488c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
3489c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename A1, typename A2, typename A3,
3490c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A4, typename X1, typename X2, typename X3, typename X4>
3491c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple4<A1, A2, A3, A4> >
3492c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, A1, A2, A3, A4),
3493c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
3494c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple4<A1, A2, A3, A4> >* t =
3495c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, A1, A2, A3, A4),
3496c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple4<P1, P2, P3, P4>, Tuple4<A1, A2, A3, A4> >
3497c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4));
3498c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple4<A1, A2, A3, A4> >(t);
3499c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
3500c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3501c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
3502c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined (OS_WIN)
3503c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
3504c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename A1, typename A2, typename A3,
3505c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A4, typename X1, typename X2, typename X3, typename X4>
3506c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple4<A1, A2, A3, A4> >
3507c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, A1, A2, A3, A4),
3508c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
3509c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple4<A1, A2, A3, A4> >* t =
3510c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, A1, A2, A3, A4),
3511c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple4<P1, P2, P3, P4>, Tuple4<A1, A2, A3, A4> >
3512c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4));
3513c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple4<A1, A2, A3, A4> >(t);
3514c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
3515c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
3516c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename P2, typename P3, typename P4,
3517c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A1, typename A2, typename A3, typename A4, typename X1,
3518c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X2, typename X3, typename X4>
3519c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple4<A1, A2, A3, A4> >
3520c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, A1, A2, A3, A4),
3521c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
3522c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple4<A1, A2, A3, A4> >* t =
3523c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, A1, A2, A3, A4),
3524c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple4<P1, P2, P3, P4>, Tuple4<A1, A2, A3, A4> >
3525c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1, p2, p3, p4));
3526c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple4<A1, A2, A3, A4> >(t);
3527c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
3528c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3529c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
3530c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename A1, typename A2, typename A3,
3531c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A4, typename X1, typename X2, typename X3, typename X4>
3532c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple4<A1, A2, A3, A4> >
3533c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, A1, A2, A3, A4),
3534c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
3535c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple4<A1, A2, A3, A4> >* t =
3536c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, A1, A2, A3, A4),
3537c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple4<P1, P2, P3, P4>, Tuple4<A1, A2, A3, A4> >
3538c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4));
3539c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple4<A1, A2, A3, A4> >(t);
3540c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
3541c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3542c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // OS_WIN
3543c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
3544c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 4 - 5
3545c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
3546c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename A1, typename A2, typename A3,
3547c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A4, typename A5, typename X1, typename X2, typename X3,
3548c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X4>
3549c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >
3550c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, A1, A2, A3, A4, A5),
3551c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
3552c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple5<A1, A2, A3, A4, A5> >* t =
3553c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (U::*)(X1, X2, X3, X4, A1, A2, A3, A4, A5),
3554c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple4<P1, P2, P3, P4>, Tuple5<A1, A2, A3, A4, A5> >
3555c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4));
3556c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >(t);
3557c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
3558c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
3559c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename P2, typename P3, typename P4,
3560c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A1, typename A2, typename A3, typename A4, typename A5,
3561c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X1, typename X2, typename X3, typename X4>
3562c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >
3563c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (*function)(X1, X2, X3, X4, A1, A2, A3, A4, A5), const P1& p1,
3564c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2, const P3& p3, const P4& p4) {
3565c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple5<A1, A2, A3, A4, A5> >* t =
3566c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (*)(X1, X2, X3, X4, A1, A2, A3, A4, A5),
3567c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple4<P1, P2, P3, P4>, Tuple5<A1, A2, A3, A4, A5> >
3568c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1, p2, p3, p4));
3569c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >(t);
3570c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
3571c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
3572c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3573c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
3574c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename A1, typename A2, typename A3,
3575c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A4, typename A5, typename X1, typename X2, typename X3,
3576c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X4>
3577c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >
3578c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, A1, A2, A3, A4, A5),
3579c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
3580c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple5<A1, A2, A3, A4, A5> >* t =
3581c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, A1, A2, A3, A4, A5),
3582c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple4<P1, P2, P3, P4>, Tuple5<A1, A2, A3, A4, A5> >
3583c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4));
3584c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >(t);
3585c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
3586c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3587c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
3588c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined (OS_WIN)
3589c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
3590c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename A1, typename A2, typename A3,
3591c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A4, typename A5, typename X1, typename X2, typename X3,
3592c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X4>
3593c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >
3594c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, A1, A2, A3, A4,
3595c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    A5), const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
3596c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple5<A1, A2, A3, A4, A5> >* t =
3597c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, A1, A2, A3, A4, A5),
3598c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple4<P1, P2, P3, P4>, Tuple5<A1, A2, A3, A4, A5> >
3599c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4));
3600c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >(t);
3601c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
3602c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
3603c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename P2, typename P3, typename P4,
3604c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A1, typename A2, typename A3, typename A4, typename A5,
3605c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X1, typename X2, typename X3, typename X4>
3606c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >
3607c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, A1, A2, A3, A4, A5),
3608c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
3609c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple5<A1, A2, A3, A4, A5> >* t =
3610c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, A1, A2, A3, A4, A5),
3611c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple4<P1, P2, P3, P4>, Tuple5<A1, A2, A3, A4, A5> >
3612c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1, p2, p3, p4));
3613c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >(t);
3614c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
3615c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3616c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
3617c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename A1, typename A2, typename A3,
3618c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A4, typename A5, typename X1, typename X2, typename X3,
3619c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X4>
3620c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >
3621c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, A1, A2, A3, A4,
3622c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    A5), const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
3623c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple5<A1, A2, A3, A4, A5> >* t =
3624c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, A1, A2, A3, A4, A5),
3625c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple4<P1, P2, P3, P4>, Tuple5<A1, A2, A3, A4, A5> >
3626c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4));
3627c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >(t);
3628c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
3629c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3630c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // OS_WIN
3631c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
3632c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 4 - 6
3633c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
3634c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename A1, typename A2, typename A3,
3635c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A4, typename A5, typename A6, typename X1, typename X2,
3636c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X3, typename X4>
3637c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >
3638c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, A1, A2, A3, A4, A5, A6),
3639c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
3640c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple6<A1, A2, A3, A4, A5, A6> >* t =
3641c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (U::*)(X1, X2, X3, X4, A1, A2, A3, A4, A5, A6),
3642c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple4<P1, P2, P3, P4>, Tuple6<A1, A2, A3, A4, A5, A6> >
3643c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4));
3644c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >(t);
3645c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
3646c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
3647c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename P2, typename P3, typename P4,
3648c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A1, typename A2, typename A3, typename A4, typename A5,
3649c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A6, typename X1, typename X2, typename X3, typename X4>
3650c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >
3651c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (*function)(X1, X2, X3, X4, A1, A2, A3, A4, A5, A6),
3652c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
3653c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple6<A1, A2, A3, A4, A5, A6> >* t =
3654c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (*)(X1, X2, X3, X4, A1, A2, A3, A4, A5, A6),
3655c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple4<P1, P2, P3, P4>, Tuple6<A1, A2, A3, A4, A5, A6> >
3656c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1, p2, p3, p4));
3657c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >(t);
3658c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
3659c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
3660c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3661c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
3662c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename A1, typename A2, typename A3,
3663c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A4, typename A5, typename A6, typename X1, typename X2,
3664c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X3, typename X4>
3665c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >
3666c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, A1, A2, A3, A4, A5, A6),
3667c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
3668c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple6<A1, A2, A3, A4, A5, A6> >* t =
3669c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, A1, A2, A3, A4, A5, A6),
3670c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple4<P1, P2, P3, P4>, Tuple6<A1, A2, A3, A4, A5, A6> >
3671c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4));
3672c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >(t);
3673c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
3674c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3675c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
3676c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined (OS_WIN)
3677c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
3678c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename A1, typename A2, typename A3,
3679c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A4, typename A5, typename A6, typename X1, typename X2,
3680c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X3, typename X4>
3681c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >
3682c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, A1, A2, A3, A4,
3683c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    A5, A6), const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
3684c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple6<A1, A2, A3, A4, A5, A6> >* t =
3685c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, A1, A2, A3, A4, A5, A6),
3686c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple4<P1, P2, P3, P4>, Tuple6<A1, A2, A3, A4, A5, A6> >
3687c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4));
3688c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >(t);
3689c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
3690c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
3691c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename P2, typename P3, typename P4,
3692c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A1, typename A2, typename A3, typename A4, typename A5,
3693c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A6, typename X1, typename X2, typename X3, typename X4>
3694c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >
3695c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, A1, A2, A3, A4, A5, A6),
3696c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
3697c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple6<A1, A2, A3, A4, A5, A6> >* t =
3698c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, A1, A2, A3, A4, A5, A6),
3699c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple4<P1, P2, P3, P4>, Tuple6<A1, A2, A3, A4, A5, A6> >
3700c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1, p2, p3, p4));
3701c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >(t);
3702c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
3703c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3704c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
3705c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename A1, typename A2, typename A3,
3706c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A4, typename A5, typename A6, typename X1, typename X2,
3707c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X3, typename X4>
3708c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >
3709c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, A1, A2, A3, A4,
3710c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    A5, A6), const P1& p1, const P2& p2, const P3& p3, const P4& p4) {
3711c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple6<A1, A2, A3, A4, A5, A6> >* t =
3712c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, A1, A2, A3, A4, A5, A6),
3713c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple4<P1, P2, P3, P4>, Tuple6<A1, A2, A3, A4, A5, A6> >
3714c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4));
3715c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >(t);
3716c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
3717c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3718c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // OS_WIN
3719c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
3720c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 5 - 0
3721c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
3722c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename P5, typename X1, typename X2,
3723c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X3, typename X4, typename X5>
3724c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple0>
3725c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, X5), const P1& p1,
3726c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
3727c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple0>* t =
3728c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (U::*)(X1, X2, X3, X4, X5),
3729c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple5<P1, P2, P3, P4, P5>, Tuple0>
3730c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4, p5));
3731c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple0>(t);
3732c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
3733c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
3734c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename P2, typename P3, typename P4,
3735c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P5, typename X1, typename X2, typename X3, typename X4,
3736c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X5>
3737c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple0>
3738c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (*function)(X1, X2, X3, X4, X5), const P1& p1, const P2& p2,
3739c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P3& p3, const P4& p4, const P5& p5) {
3740c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple0>* t =
3741c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (*)(X1, X2, X3, X4, X5),
3742c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple5<P1, P2, P3, P4, P5>, Tuple0>
3743c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1, p2, p3, p4, p5));
3744c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple0>(t);
3745c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
3746c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
3747c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3748c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
3749c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename P5, typename X1, typename X2,
3750c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X3, typename X4, typename X5>
3751c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple0>
3752c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, X5), const P1& p1,
3753c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
3754c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple0>* t =
3755c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, X5),
3756c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple5<P1, P2, P3, P4, P5>, Tuple0>
3757c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4, p5));
3758c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple0>(t);
3759c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
3760c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3761c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
3762c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined (OS_WIN)
3763c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
3764c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename P5, typename X1, typename X2,
3765c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X3, typename X4, typename X5>
3766c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple0>
3767c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5),
3768c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
3769c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple0>* t =
3770c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5),
3771c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple5<P1, P2, P3, P4, P5>, Tuple0>
3772c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4, p5));
3773c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple0>(t);
3774c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
3775c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
3776c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename P2, typename P3, typename P4,
3777c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P5, typename X1, typename X2, typename X3, typename X4,
3778c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X5>
3779c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple0>
3780c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, X5), const P1& p1,
3781c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
3782c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple0>* t =
3783c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, X5),
3784c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple5<P1, P2, P3, P4, P5>, Tuple0>
3785c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1, p2, p3, p4, p5));
3786c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple0>(t);
3787c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
3788c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3789c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
3790c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename P5, typename X1, typename X2,
3791c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X3, typename X4, typename X5>
3792c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple0>
3793c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5),
3794c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
3795c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple0>* t =
3796c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5),
3797c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple5<P1, P2, P3, P4, P5>, Tuple0>
3798c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4, p5));
3799c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple0>(t);
3800c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
3801c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3802c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // OS_WIN
3803c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
3804c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 5 - 1
3805c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
3806c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename P5, typename A1, typename X1,
3807c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X2, typename X3, typename X4, typename X5>
3808c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple1<A1> >
3809c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, X5, A1), const P1& p1,
3810c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
3811c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple1<A1> >* t =
3812c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (U::*)(X1, X2, X3, X4, X5, A1),
3813c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple5<P1, P2, P3, P4, P5>, Tuple1<A1> >
3814c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4, p5));
3815c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple1<A1> >(t);
3816c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
3817c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
3818c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename P2, typename P3, typename P4,
3819c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P5, typename A1, typename X1, typename X2, typename X3,
3820c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X4, typename X5>
3821c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple1<A1> >
3822c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (*function)(X1, X2, X3, X4, X5, A1), const P1& p1, const P2& p2,
3823c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P3& p3, const P4& p4, const P5& p5) {
3824c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple1<A1> >* t =
3825c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (*)(X1, X2, X3, X4, X5, A1),
3826c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple5<P1, P2, P3, P4, P5>, Tuple1<A1> >
3827c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1, p2, p3, p4, p5));
3828c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple1<A1> >(t);
3829c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
3830c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
3831c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3832c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
3833c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename P5, typename A1, typename X1,
3834c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X2, typename X3, typename X4, typename X5>
3835c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple1<A1> >
3836c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, X5, A1), const P1& p1,
3837c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
3838c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple1<A1> >* t =
3839c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, X5, A1),
3840c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple5<P1, P2, P3, P4, P5>, Tuple1<A1> >
3841c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4, p5));
3842c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple1<A1> >(t);
3843c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
3844c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3845c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
3846c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined (OS_WIN)
3847c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
3848c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename P5, typename A1, typename X1,
3849c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X2, typename X3, typename X4, typename X5>
3850c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple1<A1> >
3851c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, A1),
3852c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
3853c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple1<A1> >* t =
3854c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, A1),
3855c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple5<P1, P2, P3, P4, P5>, Tuple1<A1> >
3856c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4, p5));
3857c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple1<A1> >(t);
3858c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
3859c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
3860c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename P2, typename P3, typename P4,
3861c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P5, typename A1, typename X1, typename X2, typename X3,
3862c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X4, typename X5>
3863c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple1<A1> >
3864c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, X5, A1), const P1& p1,
3865c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
3866c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple1<A1> >* t =
3867c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, X5, A1),
3868c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple5<P1, P2, P3, P4, P5>, Tuple1<A1> >
3869c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1, p2, p3, p4, p5));
3870c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple1<A1> >(t);
3871c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
3872c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3873c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
3874c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename P5, typename A1, typename X1,
3875c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X2, typename X3, typename X4, typename X5>
3876c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple1<A1> >
3877c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, A1),
3878c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
3879c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple1<A1> >* t =
3880c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, A1),
3881c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple5<P1, P2, P3, P4, P5>, Tuple1<A1> >
3882c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4, p5));
3883c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple1<A1> >(t);
3884c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
3885c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3886c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // OS_WIN
3887c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
3888c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 5 - 2
3889c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
3890c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename P5, typename A1, typename A2,
3891c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X1, typename X2, typename X3, typename X4, typename X5>
3892c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple2<A1, A2> >
3893c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, X5, A1, A2), const P1& p1,
3894c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
3895c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple2<A1, A2> >* t =
3896c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (U::*)(X1, X2, X3, X4, X5, A1, A2),
3897c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple5<P1, P2, P3, P4, P5>, Tuple2<A1, A2> >
3898c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4, p5));
3899c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple2<A1, A2> >(t);
3900c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
3901c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
3902c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename P2, typename P3, typename P4,
3903c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P5, typename A1, typename A2, typename X1, typename X2,
3904c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X3, typename X4, typename X5>
3905c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple2<A1, A2> >
3906c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (*function)(X1, X2, X3, X4, X5, A1, A2), const P1& p1,
3907c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
3908c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple2<A1, A2> >* t =
3909c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (*)(X1, X2, X3, X4, X5, A1, A2),
3910c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple5<P1, P2, P3, P4, P5>, Tuple2<A1, A2> >
3911c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1, p2, p3, p4, p5));
3912c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple2<A1, A2> >(t);
3913c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
3914c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
3915c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3916c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
3917c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename P5, typename A1, typename A2,
3918c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X1, typename X2, typename X3, typename X4, typename X5>
3919c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple2<A1, A2> >
3920c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, X5, A1, A2), const P1& p1,
3921c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
3922c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple2<A1, A2> >* t =
3923c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, X5, A1, A2),
3924c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple5<P1, P2, P3, P4, P5>, Tuple2<A1, A2> >
3925c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4, p5));
3926c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple2<A1, A2> >(t);
3927c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
3928c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3929c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
3930c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined (OS_WIN)
3931c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
3932c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename P5, typename A1, typename A2,
3933c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X1, typename X2, typename X3, typename X4, typename X5>
3934c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple2<A1, A2> >
3935c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, A1, A2),
3936c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
3937c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple2<A1, A2> >* t =
3938c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, A1, A2),
3939c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple5<P1, P2, P3, P4, P5>, Tuple2<A1, A2> >
3940c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4, p5));
3941c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple2<A1, A2> >(t);
3942c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
3943c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
3944c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename P2, typename P3, typename P4,
3945c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P5, typename A1, typename A2, typename X1, typename X2,
3946c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X3, typename X4, typename X5>
3947c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple2<A1, A2> >
3948c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, X5, A1, A2), const P1& p1,
3949c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
3950c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple2<A1, A2> >* t =
3951c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, X5, A1, A2),
3952c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple5<P1, P2, P3, P4, P5>, Tuple2<A1, A2> >
3953c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1, p2, p3, p4, p5));
3954c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple2<A1, A2> >(t);
3955c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
3956c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3957c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
3958c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename P5, typename A1, typename A2,
3959c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X1, typename X2, typename X3, typename X4, typename X5>
3960c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple2<A1, A2> >
3961c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, A1, A2),
3962c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
3963c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple2<A1, A2> >* t =
3964c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, A1, A2),
3965c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple5<P1, P2, P3, P4, P5>, Tuple2<A1, A2> >
3966c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4, p5));
3967c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple2<A1, A2> >(t);
3968c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
3969c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
3970c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // OS_WIN
3971c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
3972c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 5 - 3
3973c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
3974c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename P5, typename A1, typename A2,
3975c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A3, typename X1, typename X2, typename X3, typename X4,
3976c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X5>
3977c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple3<A1, A2, A3> >
3978c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, X5, A1, A2, A3),
3979c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
3980c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple3<A1, A2, A3> >* t =
3981c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (U::*)(X1, X2, X3, X4, X5, A1, A2, A3),
3982c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple5<P1, P2, P3, P4, P5>, Tuple3<A1, A2, A3> >
3983c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4, p5));
3984c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple3<A1, A2, A3> >(t);
3985c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
3986c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
3987c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename P2, typename P3, typename P4,
3988c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P5, typename A1, typename A2, typename A3, typename X1,
3989c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X2, typename X3, typename X4, typename X5>
3990c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple3<A1, A2, A3> >
3991c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (*function)(X1, X2, X3, X4, X5, A1, A2, A3), const P1& p1,
3992c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
3993c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple3<A1, A2, A3> >* t =
3994c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (*)(X1, X2, X3, X4, X5, A1, A2, A3),
3995c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple5<P1, P2, P3, P4, P5>, Tuple3<A1, A2, A3> >
3996c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1, p2, p3, p4, p5));
3997c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple3<A1, A2, A3> >(t);
3998c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
3999c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
4000c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4001c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
4002c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename P5, typename A1, typename A2,
4003c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A3, typename X1, typename X2, typename X3, typename X4,
4004c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X5>
4005c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple3<A1, A2, A3> >
4006c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, X5, A1, A2, A3),
4007c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
4008c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple3<A1, A2, A3> >* t =
4009c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, X5, A1, A2, A3),
4010c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple5<P1, P2, P3, P4, P5>, Tuple3<A1, A2, A3> >
4011c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4, p5));
4012c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple3<A1, A2, A3> >(t);
4013c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
4014c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4015c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
4016c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined (OS_WIN)
4017c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
4018c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename P5, typename A1, typename A2,
4019c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A3, typename X1, typename X2, typename X3, typename X4,
4020c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X5>
4021c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple3<A1, A2, A3> >
4022c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, A1, A2, A3),
4023c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
4024c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple3<A1, A2, A3> >* t =
4025c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, A1, A2, A3),
4026c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple5<P1, P2, P3, P4, P5>, Tuple3<A1, A2, A3> >
4027c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4, p5));
4028c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple3<A1, A2, A3> >(t);
4029c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
4030c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
4031c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename P2, typename P3, typename P4,
4032c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P5, typename A1, typename A2, typename A3, typename X1,
4033c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X2, typename X3, typename X4, typename X5>
4034c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple3<A1, A2, A3> >
4035c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, X5, A1, A2, A3),
4036c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
4037c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple3<A1, A2, A3> >* t =
4038c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, X5, A1, A2, A3),
4039c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple5<P1, P2, P3, P4, P5>, Tuple3<A1, A2, A3> >
4040c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1, p2, p3, p4, p5));
4041c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple3<A1, A2, A3> >(t);
4042c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
4043c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4044c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
4045c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename P5, typename A1, typename A2,
4046c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A3, typename X1, typename X2, typename X3, typename X4,
4047c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X5>
4048c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple3<A1, A2, A3> >
4049c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, A1, A2, A3),
4050c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
4051c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple3<A1, A2, A3> >* t =
4052c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, A1, A2, A3),
4053c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple5<P1, P2, P3, P4, P5>, Tuple3<A1, A2, A3> >
4054c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4, p5));
4055c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple3<A1, A2, A3> >(t);
4056c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
4057c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4058c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // OS_WIN
4059c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
4060c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 5 - 4
4061c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
4062c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename P5, typename A1, typename A2,
4063c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A3, typename A4, typename X1, typename X2, typename X3,
4064c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X4, typename X5>
4065c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple4<A1, A2, A3, A4> >
4066c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, X5, A1, A2, A3, A4),
4067c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
4068c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple4<A1, A2, A3, A4> >* t =
4069c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (U::*)(X1, X2, X3, X4, X5, A1, A2, A3, A4),
4070c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple5<P1, P2, P3, P4, P5>, Tuple4<A1, A2, A3, A4> >
4071c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4, p5));
4072c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple4<A1, A2, A3, A4> >(t);
4073c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
4074c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
4075c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename P2, typename P3, typename P4,
4076c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P5, typename A1, typename A2, typename A3, typename A4,
4077c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X1, typename X2, typename X3, typename X4, typename X5>
4078c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple4<A1, A2, A3, A4> >
4079c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (*function)(X1, X2, X3, X4, X5, A1, A2, A3, A4), const P1& p1,
4080c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
4081c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple4<A1, A2, A3, A4> >* t =
4082c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (*)(X1, X2, X3, X4, X5, A1, A2, A3, A4),
4083c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple5<P1, P2, P3, P4, P5>, Tuple4<A1, A2, A3, A4> >
4084c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1, p2, p3, p4, p5));
4085c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple4<A1, A2, A3, A4> >(t);
4086c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
4087c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
4088c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4089c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
4090c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename P5, typename A1, typename A2,
4091c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A3, typename A4, typename X1, typename X2, typename X3,
4092c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X4, typename X5>
4093c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple4<A1, A2, A3, A4> >
4094c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, X5, A1, A2, A3, A4),
4095c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
4096c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple4<A1, A2, A3, A4> >* t =
4097c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, X5, A1, A2, A3, A4),
4098c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple5<P1, P2, P3, P4, P5>, Tuple4<A1, A2, A3, A4> >
4099c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4, p5));
4100c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple4<A1, A2, A3, A4> >(t);
4101c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
4102c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4103c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
4104c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined (OS_WIN)
4105c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
4106c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename P5, typename A1, typename A2,
4107c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A3, typename A4, typename X1, typename X2, typename X3,
4108c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X4, typename X5>
4109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple4<A1, A2, A3, A4> >
4110c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, A1, A2, A3,
4111c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    A4), const P1& p1, const P2& p2, const P3& p3, const P4& p4,
4112c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P5& p5) {
4113c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple4<A1, A2, A3, A4> >* t =
4114c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, A1, A2, A3, A4),
4115c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple5<P1, P2, P3, P4, P5>, Tuple4<A1, A2, A3, A4> >
4116c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4, p5));
4117c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple4<A1, A2, A3, A4> >(t);
4118c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
4119c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
4120c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename P2, typename P3, typename P4,
4121c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P5, typename A1, typename A2, typename A3, typename A4,
4122c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X1, typename X2, typename X3, typename X4, typename X5>
4123c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple4<A1, A2, A3, A4> >
4124c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, X5, A1, A2, A3, A4),
4125c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
4126c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple4<A1, A2, A3, A4> >* t =
4127c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, X5, A1, A2, A3, A4),
4128c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple5<P1, P2, P3, P4, P5>, Tuple4<A1, A2, A3, A4> >
4129c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1, p2, p3, p4, p5));
4130c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple4<A1, A2, A3, A4> >(t);
4131c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
4132c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4133c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
4134c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename P5, typename A1, typename A2,
4135c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A3, typename A4, typename X1, typename X2, typename X3,
4136c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X4, typename X5>
4137c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple4<A1, A2, A3, A4> >
4138c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, A1, A2, A3,
4139c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    A4), const P1& p1, const P2& p2, const P3& p3, const P4& p4,
4140c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P5& p5) {
4141c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple4<A1, A2, A3, A4> >* t =
4142c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, A1, A2, A3, A4),
4143c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple5<P1, P2, P3, P4, P5>, Tuple4<A1, A2, A3, A4> >
4144c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4, p5));
4145c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple4<A1, A2, A3, A4> >(t);
4146c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
4147c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4148c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // OS_WIN
4149c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
4150c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 5 - 5
4151c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
4152c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename P5, typename A1, typename A2,
4153c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A3, typename A4, typename A5, typename X1, typename X2,
4154c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X3, typename X4, typename X5>
4155c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >
4156c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, X5, A1, A2, A3, A4, A5),
4157c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
4158c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple5<A1, A2, A3, A4, A5> >* t =
4159c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (U::*)(X1, X2, X3, X4, X5, A1, A2, A3, A4, A5),
4160c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple5<P1, P2, P3, P4, P5>, Tuple5<A1, A2, A3, A4, A5> >
4161c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4, p5));
4162c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >(t);
4163c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
4164c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
4165c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename P2, typename P3, typename P4,
4166c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P5, typename A1, typename A2, typename A3, typename A4,
4167c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A5, typename X1, typename X2, typename X3, typename X4,
4168c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X5>
4169c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >
4170c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (*function)(X1, X2, X3, X4, X5, A1, A2, A3, A4, A5),
4171c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
4172c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple5<A1, A2, A3, A4, A5> >* t =
4173c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (*)(X1, X2, X3, X4, X5, A1, A2, A3, A4, A5),
4174c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple5<P1, P2, P3, P4, P5>, Tuple5<A1, A2, A3, A4, A5> >
4175c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1, p2, p3, p4, p5));
4176c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >(t);
4177c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
4178c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
4179c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4180c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
4181c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename P5, typename A1, typename A2,
4182c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A3, typename A4, typename A5, typename X1, typename X2,
4183c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X3, typename X4, typename X5>
4184c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >
4185c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, X5, A1, A2, A3, A4, A5),
4186c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
4187c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple5<A1, A2, A3, A4, A5> >* t =
4188c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, X5, A1, A2, A3, A4, A5),
4189c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple5<P1, P2, P3, P4, P5>, Tuple5<A1, A2, A3, A4, A5> >
4190c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4, p5));
4191c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >(t);
4192c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
4193c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4194c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
4195c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined (OS_WIN)
4196c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
4197c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename P5, typename A1, typename A2,
4198c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A3, typename A4, typename A5, typename X1, typename X2,
4199c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X3, typename X4, typename X5>
4200c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >
4201c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, A1, A2, A3,
4202c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    A4, A5), const P1& p1, const P2& p2, const P3& p3, const P4& p4,
4203c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P5& p5) {
4204c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple5<A1, A2, A3, A4, A5> >* t =
4205c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, A1, A2, A3, A4, A5),
4206c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple5<P1, P2, P3, P4, P5>, Tuple5<A1, A2, A3, A4, A5> >
4207c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4, p5));
4208c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >(t);
4209c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
4210c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
4211c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename P2, typename P3, typename P4,
4212c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P5, typename A1, typename A2, typename A3, typename A4,
4213c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A5, typename X1, typename X2, typename X3, typename X4,
4214c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X5>
4215c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >
4216c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, X5, A1, A2, A3, A4, A5),
4217c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
4218c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple5<A1, A2, A3, A4, A5> >* t =
4219c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, X5, A1, A2, A3, A4, A5),
4220c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple5<P1, P2, P3, P4, P5>, Tuple5<A1, A2, A3, A4, A5> >
4221c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1, p2, p3, p4, p5));
4222c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >(t);
4223c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
4224c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4225c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
4226c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename P5, typename A1, typename A2,
4227c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A3, typename A4, typename A5, typename X1, typename X2,
4228c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X3, typename X4, typename X5>
4229c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >
4230c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, A1, A2, A3,
4231c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    A4, A5), const P1& p1, const P2& p2, const P3& p3, const P4& p4,
4232c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P5& p5) {
4233c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple5<A1, A2, A3, A4, A5> >* t =
4234c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, A1, A2, A3, A4, A5),
4235c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple5<P1, P2, P3, P4, P5>, Tuple5<A1, A2, A3, A4, A5> >
4236c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4, p5));
4237c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >(t);
4238c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
4239c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4240c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // OS_WIN
4241c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
4242c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 5 - 6
4243c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
4244c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename P5, typename A1, typename A2,
4245c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A3, typename A4, typename A5, typename A6, typename X1,
4246c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X2, typename X3, typename X4, typename X5>
4247c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >
4248c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, X5, A1, A2, A3, A4, A5,
4249c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    A6), const P1& p1, const P2& p2, const P3& p3, const P4& p4,
4250c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P5& p5) {
4251c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple6<A1, A2, A3, A4, A5, A6> >* t =
4252c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (U::*)(X1, X2, X3, X4, X5, A1, A2, A3, A4, A5, A6),
4253c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple5<P1, P2, P3, P4, P5>, Tuple6<A1, A2, A3, A4, A5, A6> >
4254c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4, p5));
4255c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >(t);
4256c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
4257c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
4258c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename P2, typename P3, typename P4,
4259c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P5, typename A1, typename A2, typename A3, typename A4,
4260c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A5, typename A6, typename X1, typename X2, typename X3,
4261c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X4, typename X5>
4262c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >
4263c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (*function)(X1, X2, X3, X4, X5, A1, A2, A3, A4, A5, A6),
4264c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5) {
4265c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple6<A1, A2, A3, A4, A5, A6> >* t =
4266c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (*)(X1, X2, X3, X4, X5, A1, A2, A3, A4, A5, A6),
4267c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple5<P1, P2, P3, P4, P5>, Tuple6<A1, A2, A3, A4, A5, A6> >
4268c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1, p2, p3, p4, p5));
4269c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >(t);
4270c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
4271c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
4272c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4273c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
4274c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename P5, typename A1, typename A2,
4275c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A3, typename A4, typename A5, typename A6, typename X1,
4276c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X2, typename X3, typename X4, typename X5>
4277c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >
4278c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, X5, A1, A2, A3, A4, A5,
4279c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    A6), const P1& p1, const P2& p2, const P3& p3, const P4& p4,
4280c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P5& p5) {
4281c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple6<A1, A2, A3, A4, A5, A6> >* t =
4282c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, X5, A1, A2, A3, A4, A5, A6),
4283c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple5<P1, P2, P3, P4, P5>, Tuple6<A1, A2, A3, A4, A5, A6> >
4284c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4, p5));
4285c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >(t);
4286c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
4287c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4288c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
4289c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined (OS_WIN)
4290c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
4291c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename P5, typename A1, typename A2,
4292c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A3, typename A4, typename A5, typename A6, typename X1,
4293c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X2, typename X3, typename X4, typename X5>
4294c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >
4295c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, A1, A2, A3,
4296c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    A4, A5, A6), const P1& p1, const P2& p2, const P3& p3, const P4& p4,
4297c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P5& p5) {
4298c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple6<A1, A2, A3, A4, A5, A6> >* t =
4299c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, A1, A2, A3, A4, A5, A6),
4300c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple5<P1, P2, P3, P4, P5>, Tuple6<A1, A2, A3, A4, A5, A6> >
4301c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4, p5));
4302c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >(t);
4303c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
4304c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
4305c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename P2, typename P3, typename P4,
4306c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P5, typename A1, typename A2, typename A3, typename A4,
4307c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A5, typename A6, typename X1, typename X2, typename X3,
4308c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X4, typename X5>
4309c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >
4310c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, X5, A1, A2, A3, A4, A5,
4311c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    A6), const P1& p1, const P2& p2, const P3& p3, const P4& p4,
4312c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P5& p5) {
4313c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple6<A1, A2, A3, A4, A5, A6> >* t =
4314c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, X5, A1, A2, A3, A4, A5, A6),
4315c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple5<P1, P2, P3, P4, P5>, Tuple6<A1, A2, A3, A4, A5, A6> >
4316c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1, p2, p3, p4, p5));
4317c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >(t);
4318c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
4319c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4320c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
4321c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename P5, typename A1, typename A2,
4322c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A3, typename A4, typename A5, typename A6, typename X1,
4323c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X2, typename X3, typename X4, typename X5>
4324c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >
4325c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, A1, A2, A3,
4326c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    A4, A5, A6), const P1& p1, const P2& p2, const P3& p3, const P4& p4,
4327c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P5& p5) {
4328c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple6<A1, A2, A3, A4, A5, A6> >* t =
4329c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, A1, A2, A3, A4, A5, A6),
4330c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple5<P1, P2, P3, P4, P5>, Tuple6<A1, A2, A3, A4, A5, A6> >
4331c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4, p5));
4332c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >(t);
4333c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
4334c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4335c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // OS_WIN
4336c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
4337c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 6 - 0
4338c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
4339c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename P5, typename P6, typename X1,
4340c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X2, typename X3, typename X4, typename X5, typename X6>
4341c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple0>
4342c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, X5, X6), const P1& p1,
4343c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2, const P3& p3, const P4& p4, const P5& p5, const P6& p6) {
4344c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple0>* t =
4345c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (U::*)(X1, X2, X3, X4, X5, X6),
4346c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple6<P1, P2, P3, P4, P5, P6>, Tuple0>
4347c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6));
4348c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple0>(t);
4349c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
4350c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
4351c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename P2, typename P3, typename P4,
4352c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P5, typename P6, typename X1, typename X2, typename X3,
4353c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X4, typename X5, typename X6>
4354c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple0>
4355c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (*function)(X1, X2, X3, X4, X5, X6), const P1& p1, const P2& p2,
4356c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P3& p3, const P4& p4, const P5& p5, const P6& p6) {
4357c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple0>* t =
4358c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (*)(X1, X2, X3, X4, X5, X6),
4359c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple6<P1, P2, P3, P4, P5, P6>, Tuple0>
4360c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1, p2, p3, p4, p5, p6));
4361c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple0>(t);
4362c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
4363c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
4364c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4365c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
4366c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename P5, typename P6, typename X1,
4367c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X2, typename X3, typename X4, typename X5, typename X6>
4368c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple0>
4369c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, X5, X6), const P1& p1,
4370c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2, const P3& p3, const P4& p4, const P5& p5, const P6& p6) {
4371c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple0>* t =
4372c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, X5, X6),
4373c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple6<P1, P2, P3, P4, P5, P6>, Tuple0>
4374c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6));
4375c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple0>(t);
4376c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
4377c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4378c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
4379c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined (OS_WIN)
4380c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
4381c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename P5, typename P6, typename X1,
4382c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X2, typename X3, typename X4, typename X5, typename X6>
4383c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple0>
4384c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, X6),
4385c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
4386c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P6& p6) {
4387c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple0>* t =
4388c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, X6),
4389c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple6<P1, P2, P3, P4, P5, P6>, Tuple0>
4390c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6));
4391c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple0>(t);
4392c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
4393c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
4394c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename P2, typename P3, typename P4,
4395c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P5, typename P6, typename X1, typename X2, typename X3,
4396c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X4, typename X5, typename X6>
4397c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple0>
4398c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, X5, X6), const P1& p1,
4399c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2, const P3& p3, const P4& p4, const P5& p5, const P6& p6) {
4400c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple0>* t =
4401c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, X5, X6),
4402c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple6<P1, P2, P3, P4, P5, P6>, Tuple0>
4403c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1, p2, p3, p4, p5, p6));
4404c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple0>(t);
4405c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
4406c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4407c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
4408c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename P5, typename P6, typename X1,
4409c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X2, typename X3, typename X4, typename X5, typename X6>
4410c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple0>
4411c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, X6),
4412c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
4413c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P6& p6) {
4414c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple0>* t =
4415c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, X6),
4416c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple6<P1, P2, P3, P4, P5, P6>, Tuple0>
4417c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6));
4418c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple0>(t);
4419c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
4420c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4421c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // OS_WIN
4422c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
4423c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 6 - 1
4424c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
4425c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename P5, typename P6, typename A1,
4426c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X1, typename X2, typename X3, typename X4, typename X5,
4427c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X6>
4428c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple1<A1> >
4429c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, X5, X6, A1), const P1& p1,
4430c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2, const P3& p3, const P4& p4, const P5& p5, const P6& p6) {
4431c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple1<A1> >* t =
4432c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (U::*)(X1, X2, X3, X4, X5, X6, A1),
4433c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple6<P1, P2, P3, P4, P5, P6>, Tuple1<A1> >
4434c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6));
4435c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple1<A1> >(t);
4436c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
4437c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
4438c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename P2, typename P3, typename P4,
4439c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P5, typename P6, typename A1, typename X1, typename X2,
4440c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X3, typename X4, typename X5, typename X6>
4441c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple1<A1> >
4442c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (*function)(X1, X2, X3, X4, X5, X6, A1), const P1& p1,
4443c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2, const P3& p3, const P4& p4, const P5& p5, const P6& p6) {
4444c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple1<A1> >* t =
4445c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (*)(X1, X2, X3, X4, X5, X6, A1),
4446c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple6<P1, P2, P3, P4, P5, P6>, Tuple1<A1> >
4447c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1, p2, p3, p4, p5, p6));
4448c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple1<A1> >(t);
4449c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
4450c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
4451c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4452c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
4453c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename P5, typename P6, typename A1,
4454c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X1, typename X2, typename X3, typename X4, typename X5,
4455c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X6>
4456c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple1<A1> >
4457c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, X5, X6, A1), const P1& p1,
4458c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2, const P3& p3, const P4& p4, const P5& p5, const P6& p6) {
4459c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple1<A1> >* t =
4460c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, X5, X6, A1),
4461c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple6<P1, P2, P3, P4, P5, P6>, Tuple1<A1> >
4462c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6));
4463c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple1<A1> >(t);
4464c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
4465c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4466c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
4467c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined (OS_WIN)
4468c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
4469c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename P5, typename P6, typename A1,
4470c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X1, typename X2, typename X3, typename X4, typename X5,
4471c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X6>
4472c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple1<A1> >
4473c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, X6, A1),
4474c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
4475c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P6& p6) {
4476c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple1<A1> >* t =
4477c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, X6, A1),
4478c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple6<P1, P2, P3, P4, P5, P6>, Tuple1<A1> >
4479c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6));
4480c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple1<A1> >(t);
4481c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
4482c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
4483c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename P2, typename P3, typename P4,
4484c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P5, typename P6, typename A1, typename X1, typename X2,
4485c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X3, typename X4, typename X5, typename X6>
4486c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple1<A1> >
4487c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, X5, X6, A1), const P1& p1,
4488c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2, const P3& p3, const P4& p4, const P5& p5, const P6& p6) {
4489c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple1<A1> >* t =
4490c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, X5, X6, A1),
4491c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple6<P1, P2, P3, P4, P5, P6>, Tuple1<A1> >
4492c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1, p2, p3, p4, p5, p6));
4493c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple1<A1> >(t);
4494c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
4495c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4496c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
4497c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename P5, typename P6, typename A1,
4498c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X1, typename X2, typename X3, typename X4, typename X5,
4499c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X6>
4500c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple1<A1> >
4501c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, X6, A1),
4502c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
4503c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P6& p6) {
4504c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple1<A1> >* t =
4505c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, X6, A1),
4506c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple6<P1, P2, P3, P4, P5, P6>, Tuple1<A1> >
4507c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6));
4508c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple1<A1> >(t);
4509c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
4510c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4511c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // OS_WIN
4512c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
4513c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 6 - 2
4514c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
4515c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename P5, typename P6, typename A1,
4516c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A2, typename X1, typename X2, typename X3, typename X4,
4517c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X5, typename X6>
4518c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple2<A1, A2> >
4519c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, X5, X6, A1, A2),
4520c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
4521c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P6& p6) {
4522c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple2<A1, A2> >* t =
4523c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (U::*)(X1, X2, X3, X4, X5, X6, A1, A2),
4524c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple6<P1, P2, P3, P4, P5, P6>, Tuple2<A1, A2> >
4525c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6));
4526c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple2<A1, A2> >(t);
4527c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
4528c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
4529c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename P2, typename P3, typename P4,
4530c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P5, typename P6, typename A1, typename A2, typename X1,
4531c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X2, typename X3, typename X4, typename X5, typename X6>
4532c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple2<A1, A2> >
4533c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (*function)(X1, X2, X3, X4, X5, X6, A1, A2), const P1& p1,
4534c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2, const P3& p3, const P4& p4, const P5& p5, const P6& p6) {
4535c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple2<A1, A2> >* t =
4536c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (*)(X1, X2, X3, X4, X5, X6, A1, A2),
4537c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple6<P1, P2, P3, P4, P5, P6>, Tuple2<A1, A2> >
4538c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1, p2, p3, p4, p5, p6));
4539c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple2<A1, A2> >(t);
4540c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
4541c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
4542c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4543c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
4544c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename P5, typename P6, typename A1,
4545c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A2, typename X1, typename X2, typename X3, typename X4,
4546c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X5, typename X6>
4547c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple2<A1, A2> >
4548c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, X5, X6, A1, A2),
4549c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
4550c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P6& p6) {
4551c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple2<A1, A2> >* t =
4552c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, X5, X6, A1, A2),
4553c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple6<P1, P2, P3, P4, P5, P6>, Tuple2<A1, A2> >
4554c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6));
4555c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple2<A1, A2> >(t);
4556c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
4557c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4558c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
4559c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined (OS_WIN)
4560c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
4561c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename P5, typename P6, typename A1,
4562c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A2, typename X1, typename X2, typename X3, typename X4,
4563c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X5, typename X6>
4564c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple2<A1, A2> >
4565c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, X6, A1, A2),
4566c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
4567c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P6& p6) {
4568c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple2<A1, A2> >* t =
4569c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, X6, A1, A2),
4570c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple6<P1, P2, P3, P4, P5, P6>, Tuple2<A1, A2> >
4571c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6));
4572c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple2<A1, A2> >(t);
4573c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
4574c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
4575c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename P2, typename P3, typename P4,
4576c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P5, typename P6, typename A1, typename A2, typename X1,
4577c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X2, typename X3, typename X4, typename X5, typename X6>
4578c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple2<A1, A2> >
4579c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, X5, X6, A1, A2),
4580c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
4581c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P6& p6) {
4582c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple2<A1, A2> >* t =
4583c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, X5, X6, A1, A2),
4584c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple6<P1, P2, P3, P4, P5, P6>, Tuple2<A1, A2> >
4585c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1, p2, p3, p4, p5, p6));
4586c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple2<A1, A2> >(t);
4587c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
4588c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4589c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
4590c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename P5, typename P6, typename A1,
4591c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A2, typename X1, typename X2, typename X3, typename X4,
4592c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X5, typename X6>
4593c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple2<A1, A2> >
4594c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, X6, A1, A2),
4595c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
4596c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P6& p6) {
4597c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple2<A1, A2> >* t =
4598c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, X6, A1, A2),
4599c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple6<P1, P2, P3, P4, P5, P6>, Tuple2<A1, A2> >
4600c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6));
4601c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple2<A1, A2> >(t);
4602c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
4603c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4604c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // OS_WIN
4605c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
4606c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 6 - 3
4607c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
4608c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename P5, typename P6, typename A1,
4609c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A2, typename A3, typename X1, typename X2, typename X3,
4610c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X4, typename X5, typename X6>
4611c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple3<A1, A2, A3> >
4612c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, X5, X6, A1, A2, A3),
4613c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
4614c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P6& p6) {
4615c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple3<A1, A2, A3> >* t =
4616c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (U::*)(X1, X2, X3, X4, X5, X6, A1, A2, A3),
4617c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple6<P1, P2, P3, P4, P5, P6>, Tuple3<A1, A2, A3> >
4618c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6));
4619c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple3<A1, A2, A3> >(t);
4620c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
4621c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
4622c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename P2, typename P3, typename P4,
4623c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P5, typename P6, typename A1, typename A2, typename A3,
4624c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X1, typename X2, typename X3, typename X4, typename X5,
4625c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X6>
4626c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple3<A1, A2, A3> >
4627c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (*function)(X1, X2, X3, X4, X5, X6, A1, A2, A3), const P1& p1,
4628c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P2& p2, const P3& p3, const P4& p4, const P5& p5, const P6& p6) {
4629c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple3<A1, A2, A3> >* t =
4630c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (*)(X1, X2, X3, X4, X5, X6, A1, A2, A3),
4631c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple6<P1, P2, P3, P4, P5, P6>, Tuple3<A1, A2, A3> >
4632c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1, p2, p3, p4, p5, p6));
4633c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple3<A1, A2, A3> >(t);
4634c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
4635c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
4636c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4637c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
4638c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename P5, typename P6, typename A1,
4639c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A2, typename A3, typename X1, typename X2, typename X3,
4640c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X4, typename X5, typename X6>
4641c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple3<A1, A2, A3> >
4642c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, X5, X6, A1, A2, A3),
4643c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
4644c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P6& p6) {
4645c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple3<A1, A2, A3> >* t =
4646c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, X5, X6, A1, A2, A3),
4647c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple6<P1, P2, P3, P4, P5, P6>, Tuple3<A1, A2, A3> >
4648c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6));
4649c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple3<A1, A2, A3> >(t);
4650c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
4651c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4652c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
4653c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined (OS_WIN)
4654c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
4655c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename P5, typename P6, typename A1,
4656c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A2, typename A3, typename X1, typename X2, typename X3,
4657c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X4, typename X5, typename X6>
4658c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple3<A1, A2, A3> >
4659c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, X6, A1, A2,
4660c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    A3), const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
4661c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P6& p6) {
4662c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple3<A1, A2, A3> >* t =
4663c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, X6, A1, A2, A3),
4664c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple6<P1, P2, P3, P4, P5, P6>, Tuple3<A1, A2, A3> >
4665c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6));
4666c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple3<A1, A2, A3> >(t);
4667c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
4668c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
4669c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename P2, typename P3, typename P4,
4670c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P5, typename P6, typename A1, typename A2, typename A3,
4671c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X1, typename X2, typename X3, typename X4, typename X5,
4672c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X6>
4673c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple3<A1, A2, A3> >
4674c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, X5, X6, A1, A2, A3),
4675c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
4676c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P6& p6) {
4677c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple3<A1, A2, A3> >* t =
4678c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, X5, X6, A1, A2, A3),
4679c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple6<P1, P2, P3, P4, P5, P6>, Tuple3<A1, A2, A3> >
4680c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1, p2, p3, p4, p5, p6));
4681c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple3<A1, A2, A3> >(t);
4682c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
4683c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4684c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
4685c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename P5, typename P6, typename A1,
4686c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A2, typename A3, typename X1, typename X2, typename X3,
4687c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X4, typename X5, typename X6>
4688c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple3<A1, A2, A3> >
4689c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, X6, A1, A2,
4690c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    A3), const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
4691c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P6& p6) {
4692c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple3<A1, A2, A3> >* t =
4693c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, X6, A1, A2, A3),
4694c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple6<P1, P2, P3, P4, P5, P6>, Tuple3<A1, A2, A3> >
4695c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6));
4696c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple3<A1, A2, A3> >(t);
4697c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
4698c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4699c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // OS_WIN
4700c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
4701c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 6 - 4
4702c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
4703c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename P5, typename P6, typename A1,
4704c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A2, typename A3, typename A4, typename X1, typename X2,
4705c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X3, typename X4, typename X5, typename X6>
4706c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple4<A1, A2, A3, A4> >
4707c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4),
4708c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
4709c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P6& p6) {
4710c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple4<A1, A2, A3, A4> >* t =
4711c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (U::*)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4),
4712c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple6<P1, P2, P3, P4, P5, P6>, Tuple4<A1, A2, A3, A4> >
4713c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6));
4714c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple4<A1, A2, A3, A4> >(t);
4715c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
4716c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
4717c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename P2, typename P3, typename P4,
4718c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P5, typename P6, typename A1, typename A2, typename A3,
4719c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A4, typename X1, typename X2, typename X3, typename X4,
4720c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X5, typename X6>
4721c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple4<A1, A2, A3, A4> >
4722c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (*function)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4),
4723c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
4724c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P6& p6) {
4725c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple4<A1, A2, A3, A4> >* t =
4726c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (*)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4),
4727c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple6<P1, P2, P3, P4, P5, P6>, Tuple4<A1, A2, A3, A4> >
4728c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1, p2, p3, p4, p5, p6));
4729c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple4<A1, A2, A3, A4> >(t);
4730c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
4731c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
4732c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4733c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
4734c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename P5, typename P6, typename A1,
4735c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A2, typename A3, typename A4, typename X1, typename X2,
4736c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X3, typename X4, typename X5, typename X6>
4737c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple4<A1, A2, A3, A4> >
4738c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4),
4739c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
4740c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P6& p6) {
4741c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple4<A1, A2, A3, A4> >* t =
4742c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4),
4743c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple6<P1, P2, P3, P4, P5, P6>, Tuple4<A1, A2, A3, A4> >
4744c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6));
4745c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple4<A1, A2, A3, A4> >(t);
4746c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
4747c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4748c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
4749c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined (OS_WIN)
4750c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
4751c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename P5, typename P6, typename A1,
4752c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A2, typename A3, typename A4, typename X1, typename X2,
4753c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X3, typename X4, typename X5, typename X6>
4754c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple4<A1, A2, A3, A4> >
4755c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, X6, A1, A2,
4756c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    A3, A4), const P1& p1, const P2& p2, const P3& p3, const P4& p4,
4757c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P5& p5, const P6& p6) {
4758c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple4<A1, A2, A3, A4> >* t =
4759c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4),
4760c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple6<P1, P2, P3, P4, P5, P6>, Tuple4<A1, A2, A3, A4> >
4761c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6));
4762c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple4<A1, A2, A3, A4> >(t);
4763c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
4764c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
4765c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename P2, typename P3, typename P4,
4766c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P5, typename P6, typename A1, typename A2, typename A3,
4767c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A4, typename X1, typename X2, typename X3, typename X4,
4768c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X5, typename X6>
4769c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple4<A1, A2, A3, A4> >
4770c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4),
4771c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
4772c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P6& p6) {
4773c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple4<A1, A2, A3, A4> >* t =
4774c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4),
4775c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple6<P1, P2, P3, P4, P5, P6>, Tuple4<A1, A2, A3, A4> >
4776c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1, p2, p3, p4, p5, p6));
4777c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple4<A1, A2, A3, A4> >(t);
4778c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
4779c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4780c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
4781c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename P5, typename P6, typename A1,
4782c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A2, typename A3, typename A4, typename X1, typename X2,
4783c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X3, typename X4, typename X5, typename X6>
4784c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple4<A1, A2, A3, A4> >
4785c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, X6, A1, A2,
4786c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    A3, A4), const P1& p1, const P2& p2, const P3& p3, const P4& p4,
4787c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P5& p5, const P6& p6) {
4788c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple4<A1, A2, A3, A4> >* t =
4789c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4),
4790c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple6<P1, P2, P3, P4, P5, P6>, Tuple4<A1, A2, A3, A4> >
4791c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6));
4792c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple4<A1, A2, A3, A4> >(t);
4793c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
4794c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4795c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // OS_WIN
4796c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
4797c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 6 - 5
4798c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
4799c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename P5, typename P6, typename A1,
4800c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A2, typename A3, typename A4, typename A5, typename X1,
4801c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X2, typename X3, typename X4, typename X5, typename X6>
4802c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >
4803c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4,
4804c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    A5), const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
4805c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P6& p6) {
4806c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple5<A1, A2, A3, A4, A5> >* t =
4807c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (U::*)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4, A5),
4808c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple6<P1, P2, P3, P4, P5, P6>, Tuple5<A1, A2, A3, A4, A5> >
4809c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6));
4810c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >(t);
4811c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
4812c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
4813c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename P2, typename P3, typename P4,
4814c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P5, typename P6, typename A1, typename A2, typename A3,
4815c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A4, typename A5, typename X1, typename X2, typename X3,
4816c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X4, typename X5, typename X6>
4817c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >
4818c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (*function)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4, A5),
4819c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
4820c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P6& p6) {
4821c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple5<A1, A2, A3, A4, A5> >* t =
4822c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (*)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4, A5),
4823c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple6<P1, P2, P3, P4, P5, P6>, Tuple5<A1, A2, A3, A4, A5> >
4824c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1, p2, p3, p4, p5, p6));
4825c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >(t);
4826c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
4827c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
4828c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4829c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
4830c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename P5, typename P6, typename A1,
4831c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A2, typename A3, typename A4, typename A5, typename X1,
4832c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X2, typename X3, typename X4, typename X5, typename X6>
4833c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >
4834c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4,
4835c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    A5), const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
4836c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P6& p6) {
4837c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple5<A1, A2, A3, A4, A5> >* t =
4838c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4, A5),
4839c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple6<P1, P2, P3, P4, P5, P6>, Tuple5<A1, A2, A3, A4, A5> >
4840c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6));
4841c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >(t);
4842c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
4843c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4844c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
4845c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined (OS_WIN)
4846c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
4847c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename P5, typename P6, typename A1,
4848c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A2, typename A3, typename A4, typename A5, typename X1,
4849c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X2, typename X3, typename X4, typename X5, typename X6>
4850c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >
4851c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, X6, A1, A2,
4852c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    A3, A4, A5), const P1& p1, const P2& p2, const P3& p3, const P4& p4,
4853c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P5& p5, const P6& p6) {
4854c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple5<A1, A2, A3, A4, A5> >* t =
4855c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4, A5),
4856c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple6<P1, P2, P3, P4, P5, P6>, Tuple5<A1, A2, A3, A4, A5> >
4857c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6));
4858c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >(t);
4859c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
4860c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
4861c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename P2, typename P3, typename P4,
4862c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P5, typename P6, typename A1, typename A2, typename A3,
4863c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A4, typename A5, typename X1, typename X2, typename X3,
4864c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X4, typename X5, typename X6>
4865c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >
4866c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4,
4867c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    A5), const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
4868c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P6& p6) {
4869c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple5<A1, A2, A3, A4, A5> >* t =
4870c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4, A5),
4871c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple6<P1, P2, P3, P4, P5, P6>, Tuple5<A1, A2, A3, A4, A5> >
4872c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1, p2, p3, p4, p5, p6));
4873c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >(t);
4874c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
4875c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4876c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
4877c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename P5, typename P6, typename A1,
4878c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A2, typename A3, typename A4, typename A5, typename X1,
4879c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X2, typename X3, typename X4, typename X5, typename X6>
4880c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >
4881c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, X6, A1, A2,
4882c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    A3, A4, A5), const P1& p1, const P2& p2, const P3& p3, const P4& p4,
4883c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P5& p5, const P6& p6) {
4884c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple5<A1, A2, A3, A4, A5> >* t =
4885c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4, A5),
4886c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple6<P1, P2, P3, P4, P5, P6>, Tuple5<A1, A2, A3, A4, A5> >
4887c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6));
4888c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple5<A1, A2, A3, A4, A5> >(t);
4889c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
4890c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4891c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // OS_WIN
4892c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
4893c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// 6 - 6
4894c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
4895c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename P5, typename P6, typename A1,
4896c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A2, typename A3, typename A4, typename A5, typename A6,
4897c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X1, typename X2, typename X3, typename X4, typename X5,
4898c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X6>
4899c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >
4900c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (U::*method)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4, A5,
4901c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    A6), const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
4902c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P6& p6) {
4903c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple6<A1, A2, A3, A4, A5, A6> >* t =
4904c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (U::*)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4, A5, A6),
4905c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple6<P1, P2, P3, P4, P5, P6>, Tuple6<A1, A2, A3, A4, A5, A6> >
4906c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6));
4907c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >(t);
4908c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
4909c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
4910c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename P2, typename P3, typename P4,
4911c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P5, typename P6, typename A1, typename A2, typename A3,
4912c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A4, typename A5, typename A6, typename X1, typename X2,
4913c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X3, typename X4, typename X5, typename X6>
4914c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >
4915c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (*function)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4, A5, A6),
4916c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
4917c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P6& p6) {
4918c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple6<A1, A2, A3, A4, A5, A6> >* t =
4919c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (*)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4, A5, A6),
4920c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple6<P1, P2, P3, P4, P5, P6>, Tuple6<A1, A2, A3, A4, A5, A6> >
4921c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1, p2, p3, p4, p5, p6));
4922c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >(t);
4923c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
4924c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
4925c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4926c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
4927c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename P5, typename P6, typename A1,
4928c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A2, typename A3, typename A4, typename A5, typename A6,
4929c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X1, typename X2, typename X3, typename X4, typename X5,
4930c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X6>
4931c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >
4932c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (U::*method)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4, A5,
4933c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    A6), const P1& p1, const P2& p2, const P3& p3, const P4& p4, const P5& p5,
4934c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P6& p6) {
4935c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple6<A1, A2, A3, A4, A5, A6> >* t =
4936c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (U::*)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4, A5, A6),
4937c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple6<P1, P2, P3, P4, P5, P6>, Tuple6<A1, A2, A3, A4, A5, A6> >
4938c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6));
4939c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >(t);
4940c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
4941c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4942c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
4943c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#if defined (OS_WIN)
4944c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
4945c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename P5, typename P6, typename A1,
4946c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A2, typename A3, typename A4, typename A5, typename A6,
4947c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X1, typename X2, typename X3, typename X4, typename X5,
4948c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X6>
4949c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >
4950c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T* obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, X6, A1, A2,
4951c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    A3, A4, A5, A6), const P1& p1, const P2& p2, const P3& p3, const P4& p4,
4952c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P5& p5, const P6& p6) {
4953c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple6<A1, A2, A3, A4, A5, A6> >* t =
4954c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new Mutant<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4, A5, A6),
4955c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                 Tuple6<P1, P2, P3, P4, P5, P6>, Tuple6<A1, A2, A3, A4, A5, A6> >
4956c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6));
4957c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >(t);
4958c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
4959c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
4960c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename P1, typename P2, typename P3, typename P4,
4961c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P5, typename P6, typename A1, typename A2, typename A3,
4962c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A4, typename A5, typename A6, typename X1, typename X2,
4963c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X3, typename X4, typename X5, typename X6>
4964c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >
4965c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(R (__stdcall *function)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4,
4966c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    A5, A6), const P1& p1, const P2& p2, const P3& p3, const P4& p4,
4967c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P5& p5, const P6& p6) {
4968c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple6<A1, A2, A3, A4, A5, A6> >* t =
4969c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantFunction<R, R (__stdcall *)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4, A5, A6),
4970c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                         Tuple6<P1, P2, P3, P4, P5, P6>, Tuple6<A1, A2, A3, A4, A5, A6> >
4971c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (function, MakeTuple(p1, p2, p3, p4, p5, p6));
4972c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >(t);
4973c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
4974c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifdef GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4975c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochtemplate <typename R, typename T, typename U, typename P1, typename P2,
4976c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename P3, typename P4, typename P5, typename P6, typename A1,
4977c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename A2, typename A3, typename A4, typename A5, typename A6,
4978c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X1, typename X2, typename X3, typename X4, typename X5,
4979c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          typename X6>
4980c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochinline MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >
4981c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochCreateFunctor(T** obj, R (__stdcall U::*method)(X1, X2, X3, X4, X5, X6, A1, A2,
4982c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    A3, A4, A5, A6), const P1& p1, const P2& p2, const P3& p3, const P4& p4,
4983c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    const P5& p5, const P6& p6) {
4984c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  MutantRunner<R, Tuple6<A1, A2, A3, A4, A5, A6> >* t =
4985c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      new MutantLateObjectBind<R, T, R (__stdcall U::*)(X1, X2, X3, X4, X5, X6, A1, A2, A3, A4, A5, A6),
4986c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                               Tuple6<P1, P2, P3, P4, P5, P6>, Tuple6<A1, A2, A3, A4, A5, A6> >
4987c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch          (obj, method, MakeTuple(p1, p2, p3, p4, p5, p6));
4988c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return MutantFunctor<R, Tuple6<A1, A2, A3, A4, A5, A6> >(t);
4989c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
4990c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // GMOCK_MUTANT_INCLUDE_LATE_OBJECT_BINDING
4991c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // OS_WIN
4992c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
4993c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}  // namespace testing
4994c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
4995c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // TESTING_GMOCK_MUTANT_H_
4996