00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038 #ifndef GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_MATCHERS_H_
00039 #define GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_MATCHERS_H_
00040
00041 #include <iterator>
00042 #include <sstream>
00043 #include <string>
00044 #include <vector>
00045 #include "gmock/gmock-matchers.h"
00046
00047 namespace testing {
00048 namespace internal {
00049
00050
00051 #define GMOCK_FIELD_TYPE_(Tuple, i) \
00052 typename ::std::tr1::tuple_element<i, Tuple>::type
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065 template <class Tuple, int k0 = -1, int k1 = -1, int k2 = -1, int k3 = -1,
00066 int k4 = -1, int k5 = -1, int k6 = -1, int k7 = -1, int k8 = -1,
00067 int k9 = -1>
00068 class TupleFields;
00069
00070
00071 template <class Tuple, int k0, int k1, int k2, int k3, int k4, int k5, int k6,
00072 int k7, int k8, int k9>
00073 class TupleFields {
00074 public:
00075 typedef ::std::tr1::tuple<GMOCK_FIELD_TYPE_(Tuple, k0),
00076 GMOCK_FIELD_TYPE_(Tuple, k1), GMOCK_FIELD_TYPE_(Tuple, k2),
00077 GMOCK_FIELD_TYPE_(Tuple, k3), GMOCK_FIELD_TYPE_(Tuple, k4),
00078 GMOCK_FIELD_TYPE_(Tuple, k5), GMOCK_FIELD_TYPE_(Tuple, k6),
00079 GMOCK_FIELD_TYPE_(Tuple, k7), GMOCK_FIELD_TYPE_(Tuple, k8),
00080 GMOCK_FIELD_TYPE_(Tuple, k9)> type;
00081 static type GetSelectedFields(const Tuple& t) {
00082 using ::std::tr1::get;
00083 return type(get<k0>(t), get<k1>(t), get<k2>(t), get<k3>(t), get<k4>(t),
00084 get<k5>(t), get<k6>(t), get<k7>(t), get<k8>(t), get<k9>(t));
00085 }
00086 };
00087
00088
00089
00090 template <class Tuple>
00091 class TupleFields<Tuple, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1> {
00092 public:
00093 typedef ::std::tr1::tuple<> type;
00094 static type GetSelectedFields(const Tuple& ) {
00095 using ::std::tr1::get;
00096 return type();
00097 }
00098 };
00099
00100 template <class Tuple, int k0>
00101 class TupleFields<Tuple, k0, -1, -1, -1, -1, -1, -1, -1, -1, -1> {
00102 public:
00103 typedef ::std::tr1::tuple<GMOCK_FIELD_TYPE_(Tuple, k0)> type;
00104 static type GetSelectedFields(const Tuple& t) {
00105 using ::std::tr1::get;
00106 return type(get<k0>(t));
00107 }
00108 };
00109
00110 template <class Tuple, int k0, int k1>
00111 class TupleFields<Tuple, k0, k1, -1, -1, -1, -1, -1, -1, -1, -1> {
00112 public:
00113 typedef ::std::tr1::tuple<GMOCK_FIELD_TYPE_(Tuple, k0),
00114 GMOCK_FIELD_TYPE_(Tuple, k1)> type;
00115 static type GetSelectedFields(const Tuple& t) {
00116 using ::std::tr1::get;
00117 return type(get<k0>(t), get<k1>(t));
00118 }
00119 };
00120
00121 template <class Tuple, int k0, int k1, int k2>
00122 class TupleFields<Tuple, k0, k1, k2, -1, -1, -1, -1, -1, -1, -1> {
00123 public:
00124 typedef ::std::tr1::tuple<GMOCK_FIELD_TYPE_(Tuple, k0),
00125 GMOCK_FIELD_TYPE_(Tuple, k1), GMOCK_FIELD_TYPE_(Tuple, k2)> type;
00126 static type GetSelectedFields(const Tuple& t) {
00127 using ::std::tr1::get;
00128 return type(get<k0>(t), get<k1>(t), get<k2>(t));
00129 }
00130 };
00131
00132 template <class Tuple, int k0, int k1, int k2, int k3>
00133 class TupleFields<Tuple, k0, k1, k2, k3, -1, -1, -1, -1, -1, -1> {
00134 public:
00135 typedef ::std::tr1::tuple<GMOCK_FIELD_TYPE_(Tuple, k0),
00136 GMOCK_FIELD_TYPE_(Tuple, k1), GMOCK_FIELD_TYPE_(Tuple, k2),
00137 GMOCK_FIELD_TYPE_(Tuple, k3)> type;
00138 static type GetSelectedFields(const Tuple& t) {
00139 using ::std::tr1::get;
00140 return type(get<k0>(t), get<k1>(t), get<k2>(t), get<k3>(t));
00141 }
00142 };
00143
00144 template <class Tuple, int k0, int k1, int k2, int k3, int k4>
00145 class TupleFields<Tuple, k0, k1, k2, k3, k4, -1, -1, -1, -1, -1> {
00146 public:
00147 typedef ::std::tr1::tuple<GMOCK_FIELD_TYPE_(Tuple, k0),
00148 GMOCK_FIELD_TYPE_(Tuple, k1), GMOCK_FIELD_TYPE_(Tuple, k2),
00149 GMOCK_FIELD_TYPE_(Tuple, k3), GMOCK_FIELD_TYPE_(Tuple, k4)> type;
00150 static type GetSelectedFields(const Tuple& t) {
00151 using ::std::tr1::get;
00152 return type(get<k0>(t), get<k1>(t), get<k2>(t), get<k3>(t), get<k4>(t));
00153 }
00154 };
00155
00156 template <class Tuple, int k0, int k1, int k2, int k3, int k4, int k5>
00157 class TupleFields<Tuple, k0, k1, k2, k3, k4, k5, -1, -1, -1, -1> {
00158 public:
00159 typedef ::std::tr1::tuple<GMOCK_FIELD_TYPE_(Tuple, k0),
00160 GMOCK_FIELD_TYPE_(Tuple, k1), GMOCK_FIELD_TYPE_(Tuple, k2),
00161 GMOCK_FIELD_TYPE_(Tuple, k3), GMOCK_FIELD_TYPE_(Tuple, k4),
00162 GMOCK_FIELD_TYPE_(Tuple, k5)> type;
00163 static type GetSelectedFields(const Tuple& t) {
00164 using ::std::tr1::get;
00165 return type(get<k0>(t), get<k1>(t), get<k2>(t), get<k3>(t), get<k4>(t),
00166 get<k5>(t));
00167 }
00168 };
00169
00170 template <class Tuple, int k0, int k1, int k2, int k3, int k4, int k5, int k6>
00171 class TupleFields<Tuple, k0, k1, k2, k3, k4, k5, k6, -1, -1, -1> {
00172 public:
00173 typedef ::std::tr1::tuple<GMOCK_FIELD_TYPE_(Tuple, k0),
00174 GMOCK_FIELD_TYPE_(Tuple, k1), GMOCK_FIELD_TYPE_(Tuple, k2),
00175 GMOCK_FIELD_TYPE_(Tuple, k3), GMOCK_FIELD_TYPE_(Tuple, k4),
00176 GMOCK_FIELD_TYPE_(Tuple, k5), GMOCK_FIELD_TYPE_(Tuple, k6)> type;
00177 static type GetSelectedFields(const Tuple& t) {
00178 using ::std::tr1::get;
00179 return type(get<k0>(t), get<k1>(t), get<k2>(t), get<k3>(t), get<k4>(t),
00180 get<k5>(t), get<k6>(t));
00181 }
00182 };
00183
00184 template <class Tuple, int k0, int k1, int k2, int k3, int k4, int k5, int k6,
00185 int k7>
00186 class TupleFields<Tuple, k0, k1, k2, k3, k4, k5, k6, k7, -1, -1> {
00187 public:
00188 typedef ::std::tr1::tuple<GMOCK_FIELD_TYPE_(Tuple, k0),
00189 GMOCK_FIELD_TYPE_(Tuple, k1), GMOCK_FIELD_TYPE_(Tuple, k2),
00190 GMOCK_FIELD_TYPE_(Tuple, k3), GMOCK_FIELD_TYPE_(Tuple, k4),
00191 GMOCK_FIELD_TYPE_(Tuple, k5), GMOCK_FIELD_TYPE_(Tuple, k6),
00192 GMOCK_FIELD_TYPE_(Tuple, k7)> type;
00193 static type GetSelectedFields(const Tuple& t) {
00194 using ::std::tr1::get;
00195 return type(get<k0>(t), get<k1>(t), get<k2>(t), get<k3>(t), get<k4>(t),
00196 get<k5>(t), get<k6>(t), get<k7>(t));
00197 }
00198 };
00199
00200 template <class Tuple, int k0, int k1, int k2, int k3, int k4, int k5, int k6,
00201 int k7, int k8>
00202 class TupleFields<Tuple, k0, k1, k2, k3, k4, k5, k6, k7, k8, -1> {
00203 public:
00204 typedef ::std::tr1::tuple<GMOCK_FIELD_TYPE_(Tuple, k0),
00205 GMOCK_FIELD_TYPE_(Tuple, k1), GMOCK_FIELD_TYPE_(Tuple, k2),
00206 GMOCK_FIELD_TYPE_(Tuple, k3), GMOCK_FIELD_TYPE_(Tuple, k4),
00207 GMOCK_FIELD_TYPE_(Tuple, k5), GMOCK_FIELD_TYPE_(Tuple, k6),
00208 GMOCK_FIELD_TYPE_(Tuple, k7), GMOCK_FIELD_TYPE_(Tuple, k8)> type;
00209 static type GetSelectedFields(const Tuple& t) {
00210 using ::std::tr1::get;
00211 return type(get<k0>(t), get<k1>(t), get<k2>(t), get<k3>(t), get<k4>(t),
00212 get<k5>(t), get<k6>(t), get<k7>(t), get<k8>(t));
00213 }
00214 };
00215
00216 #undef GMOCK_FIELD_TYPE_
00217
00218
00219 template <class ArgsTuple, int k0 = -1, int k1 = -1, int k2 = -1, int k3 = -1,
00220 int k4 = -1, int k5 = -1, int k6 = -1, int k7 = -1, int k8 = -1,
00221 int k9 = -1>
00222 class ArgsMatcherImpl : public MatcherInterface<ArgsTuple> {
00223 public:
00224
00225 typedef GTEST_REMOVE_REFERENCE_AND_CONST_(ArgsTuple) RawArgsTuple;
00226 typedef typename internal::TupleFields<RawArgsTuple, k0, k1, k2, k3, k4, k5,
00227 k6, k7, k8, k9>::type SelectedArgs;
00228 typedef Matcher<const SelectedArgs&> MonomorphicInnerMatcher;
00229
00230 template <typename InnerMatcher>
00231 explicit ArgsMatcherImpl(const InnerMatcher& inner_matcher)
00232 : inner_matcher_(SafeMatcherCast<const SelectedArgs&>(inner_matcher)) {}
00233
00234 virtual bool MatchAndExplain(ArgsTuple args,
00235 MatchResultListener* listener) const {
00236 const SelectedArgs& selected_args = GetSelectedArgs(args);
00237 if (!listener->IsInterested())
00238 return inner_matcher_.Matches(selected_args);
00239
00240 PrintIndices(listener->stream());
00241 *listener << "are " << PrintToString(selected_args);
00242
00243 StringMatchResultListener inner_listener;
00244 const bool match = inner_matcher_.MatchAndExplain(selected_args,
00245 &inner_listener);
00246 PrintIfNotEmpty(inner_listener.str(), listener->stream());
00247 return match;
00248 }
00249
00250 virtual void DescribeTo(::std::ostream* os) const {
00251 *os << "are a tuple ";
00252 PrintIndices(os);
00253 inner_matcher_.DescribeTo(os);
00254 }
00255
00256 virtual void DescribeNegationTo(::std::ostream* os) const {
00257 *os << "are a tuple ";
00258 PrintIndices(os);
00259 inner_matcher_.DescribeNegationTo(os);
00260 }
00261
00262 private:
00263 static SelectedArgs GetSelectedArgs(ArgsTuple args) {
00264 return TupleFields<RawArgsTuple, k0, k1, k2, k3, k4, k5, k6, k7, k8,
00265 k9>::GetSelectedFields(args);
00266 }
00267
00268
00269 static void PrintIndices(::std::ostream* os) {
00270 *os << "whose fields (";
00271 const int indices[10] = { k0, k1, k2, k3, k4, k5, k6, k7, k8, k9 };
00272 for (int i = 0; i < 10; i++) {
00273 if (indices[i] < 0)
00274 break;
00275
00276 if (i >= 1)
00277 *os << ", ";
00278
00279 *os << "#" << indices[i];
00280 }
00281 *os << ") ";
00282 }
00283
00284 const MonomorphicInnerMatcher inner_matcher_;
00285
00286 GTEST_DISALLOW_ASSIGN_(ArgsMatcherImpl);
00287 };
00288
00289 template <class InnerMatcher, int k0 = -1, int k1 = -1, int k2 = -1,
00290 int k3 = -1, int k4 = -1, int k5 = -1, int k6 = -1, int k7 = -1,
00291 int k8 = -1, int k9 = -1>
00292 class ArgsMatcher {
00293 public:
00294 explicit ArgsMatcher(const InnerMatcher& inner_matcher)
00295 : inner_matcher_(inner_matcher) {}
00296
00297 template <typename ArgsTuple>
00298 operator Matcher<ArgsTuple>() const {
00299 return MakeMatcher(new ArgsMatcherImpl<ArgsTuple, k0, k1, k2, k3, k4, k5,
00300 k6, k7, k8, k9>(inner_matcher_));
00301 }
00302
00303 private:
00304 const InnerMatcher inner_matcher_;
00305
00306 GTEST_DISALLOW_ASSIGN_(ArgsMatcher);
00307 };
00308
00309
00310
00311
00312
00313
00314
00315 template <typename M1>
00316 struct AllOfResult1 {
00317 typedef M1 type;
00318 };
00319
00320 template <typename M1, typename M2>
00321 struct AllOfResult2 {
00322 typedef BothOfMatcher<
00323 typename AllOfResult1<M1>::type,
00324 typename AllOfResult1<M2>::type
00325 > type;
00326 };
00327
00328 template <typename M1, typename M2, typename M3>
00329 struct AllOfResult3 {
00330 typedef BothOfMatcher<
00331 typename AllOfResult1<M1>::type,
00332 typename AllOfResult2<M2, M3>::type
00333 > type;
00334 };
00335
00336 template <typename M1, typename M2, typename M3, typename M4>
00337 struct AllOfResult4 {
00338 typedef BothOfMatcher<
00339 typename AllOfResult2<M1, M2>::type,
00340 typename AllOfResult2<M3, M4>::type
00341 > type;
00342 };
00343
00344 template <typename M1, typename M2, typename M3, typename M4, typename M5>
00345 struct AllOfResult5 {
00346 typedef BothOfMatcher<
00347 typename AllOfResult2<M1, M2>::type,
00348 typename AllOfResult3<M3, M4, M5>::type
00349 > type;
00350 };
00351
00352 template <typename M1, typename M2, typename M3, typename M4, typename M5,
00353 typename M6>
00354 struct AllOfResult6 {
00355 typedef BothOfMatcher<
00356 typename AllOfResult3<M1, M2, M3>::type,
00357 typename AllOfResult3<M4, M5, M6>::type
00358 > type;
00359 };
00360
00361 template <typename M1, typename M2, typename M3, typename M4, typename M5,
00362 typename M6, typename M7>
00363 struct AllOfResult7 {
00364 typedef BothOfMatcher<
00365 typename AllOfResult3<M1, M2, M3>::type,
00366 typename AllOfResult4<M4, M5, M6, M7>::type
00367 > type;
00368 };
00369
00370 template <typename M1, typename M2, typename M3, typename M4, typename M5,
00371 typename M6, typename M7, typename M8>
00372 struct AllOfResult8 {
00373 typedef BothOfMatcher<
00374 typename AllOfResult4<M1, M2, M3, M4>::type,
00375 typename AllOfResult4<M5, M6, M7, M8>::type
00376 > type;
00377 };
00378
00379 template <typename M1, typename M2, typename M3, typename M4, typename M5,
00380 typename M6, typename M7, typename M8, typename M9>
00381 struct AllOfResult9 {
00382 typedef BothOfMatcher<
00383 typename AllOfResult4<M1, M2, M3, M4>::type,
00384 typename AllOfResult5<M5, M6, M7, M8, M9>::type
00385 > type;
00386 };
00387
00388 template <typename M1, typename M2, typename M3, typename M4, typename M5,
00389 typename M6, typename M7, typename M8, typename M9, typename M10>
00390 struct AllOfResult10 {
00391 typedef BothOfMatcher<
00392 typename AllOfResult5<M1, M2, M3, M4, M5>::type,
00393 typename AllOfResult5<M6, M7, M8, M9, M10>::type
00394 > type;
00395 };
00396
00397
00398
00399
00400
00401
00402
00403 template <typename M1>
00404 struct AnyOfResult1 {
00405 typedef M1 type;
00406 };
00407
00408 template <typename M1, typename M2>
00409 struct AnyOfResult2 {
00410 typedef EitherOfMatcher<
00411 typename AnyOfResult1<M1>::type,
00412 typename AnyOfResult1<M2>::type
00413 > type;
00414 };
00415
00416 template <typename M1, typename M2, typename M3>
00417 struct AnyOfResult3 {
00418 typedef EitherOfMatcher<
00419 typename AnyOfResult1<M1>::type,
00420 typename AnyOfResult2<M2, M3>::type
00421 > type;
00422 };
00423
00424 template <typename M1, typename M2, typename M3, typename M4>
00425 struct AnyOfResult4 {
00426 typedef EitherOfMatcher<
00427 typename AnyOfResult2<M1, M2>::type,
00428 typename AnyOfResult2<M3, M4>::type
00429 > type;
00430 };
00431
00432 template <typename M1, typename M2, typename M3, typename M4, typename M5>
00433 struct AnyOfResult5 {
00434 typedef EitherOfMatcher<
00435 typename AnyOfResult2<M1, M2>::type,
00436 typename AnyOfResult3<M3, M4, M5>::type
00437 > type;
00438 };
00439
00440 template <typename M1, typename M2, typename M3, typename M4, typename M5,
00441 typename M6>
00442 struct AnyOfResult6 {
00443 typedef EitherOfMatcher<
00444 typename AnyOfResult3<M1, M2, M3>::type,
00445 typename AnyOfResult3<M4, M5, M6>::type
00446 > type;
00447 };
00448
00449 template <typename M1, typename M2, typename M3, typename M4, typename M5,
00450 typename M6, typename M7>
00451 struct AnyOfResult7 {
00452 typedef EitherOfMatcher<
00453 typename AnyOfResult3<M1, M2, M3>::type,
00454 typename AnyOfResult4<M4, M5, M6, M7>::type
00455 > type;
00456 };
00457
00458 template <typename M1, typename M2, typename M3, typename M4, typename M5,
00459 typename M6, typename M7, typename M8>
00460 struct AnyOfResult8 {
00461 typedef EitherOfMatcher<
00462 typename AnyOfResult4<M1, M2, M3, M4>::type,
00463 typename AnyOfResult4<M5, M6, M7, M8>::type
00464 > type;
00465 };
00466
00467 template <typename M1, typename M2, typename M3, typename M4, typename M5,
00468 typename M6, typename M7, typename M8, typename M9>
00469 struct AnyOfResult9 {
00470 typedef EitherOfMatcher<
00471 typename AnyOfResult4<M1, M2, M3, M4>::type,
00472 typename AnyOfResult5<M5, M6, M7, M8, M9>::type
00473 > type;
00474 };
00475
00476 template <typename M1, typename M2, typename M3, typename M4, typename M5,
00477 typename M6, typename M7, typename M8, typename M9, typename M10>
00478 struct AnyOfResult10 {
00479 typedef EitherOfMatcher<
00480 typename AnyOfResult5<M1, M2, M3, M4, M5>::type,
00481 typename AnyOfResult5<M6, M7, M8, M9, M10>::type
00482 > type;
00483 };
00484
00485 }
00486
00487
00488
00489
00490 template <typename InnerMatcher>
00491 inline internal::ArgsMatcher<InnerMatcher>
00492 Args(const InnerMatcher& matcher) {
00493 return internal::ArgsMatcher<InnerMatcher>(matcher);
00494 }
00495
00496 template <int k1, typename InnerMatcher>
00497 inline internal::ArgsMatcher<InnerMatcher, k1>
00498 Args(const InnerMatcher& matcher) {
00499 return internal::ArgsMatcher<InnerMatcher, k1>(matcher);
00500 }
00501
00502 template <int k1, int k2, typename InnerMatcher>
00503 inline internal::ArgsMatcher<InnerMatcher, k1, k2>
00504 Args(const InnerMatcher& matcher) {
00505 return internal::ArgsMatcher<InnerMatcher, k1, k2>(matcher);
00506 }
00507
00508 template <int k1, int k2, int k3, typename InnerMatcher>
00509 inline internal::ArgsMatcher<InnerMatcher, k1, k2, k3>
00510 Args(const InnerMatcher& matcher) {
00511 return internal::ArgsMatcher<InnerMatcher, k1, k2, k3>(matcher);
00512 }
00513
00514 template <int k1, int k2, int k3, int k4, typename InnerMatcher>
00515 inline internal::ArgsMatcher<InnerMatcher, k1, k2, k3, k4>
00516 Args(const InnerMatcher& matcher) {
00517 return internal::ArgsMatcher<InnerMatcher, k1, k2, k3, k4>(matcher);
00518 }
00519
00520 template <int k1, int k2, int k3, int k4, int k5, typename InnerMatcher>
00521 inline internal::ArgsMatcher<InnerMatcher, k1, k2, k3, k4, k5>
00522 Args(const InnerMatcher& matcher) {
00523 return internal::ArgsMatcher<InnerMatcher, k1, k2, k3, k4, k5>(matcher);
00524 }
00525
00526 template <int k1, int k2, int k3, int k4, int k5, int k6, typename InnerMatcher>
00527 inline internal::ArgsMatcher<InnerMatcher, k1, k2, k3, k4, k5, k6>
00528 Args(const InnerMatcher& matcher) {
00529 return internal::ArgsMatcher<InnerMatcher, k1, k2, k3, k4, k5, k6>(matcher);
00530 }
00531
00532 template <int k1, int k2, int k3, int k4, int k5, int k6, int k7,
00533 typename InnerMatcher>
00534 inline internal::ArgsMatcher<InnerMatcher, k1, k2, k3, k4, k5, k6, k7>
00535 Args(const InnerMatcher& matcher) {
00536 return internal::ArgsMatcher<InnerMatcher, k1, k2, k3, k4, k5, k6,
00537 k7>(matcher);
00538 }
00539
00540 template <int k1, int k2, int k3, int k4, int k5, int k6, int k7, int k8,
00541 typename InnerMatcher>
00542 inline internal::ArgsMatcher<InnerMatcher, k1, k2, k3, k4, k5, k6, k7, k8>
00543 Args(const InnerMatcher& matcher) {
00544 return internal::ArgsMatcher<InnerMatcher, k1, k2, k3, k4, k5, k6, k7,
00545 k8>(matcher);
00546 }
00547
00548 template <int k1, int k2, int k3, int k4, int k5, int k6, int k7, int k8,
00549 int k9, typename InnerMatcher>
00550 inline internal::ArgsMatcher<InnerMatcher, k1, k2, k3, k4, k5, k6, k7, k8, k9>
00551 Args(const InnerMatcher& matcher) {
00552 return internal::ArgsMatcher<InnerMatcher, k1, k2, k3, k4, k5, k6, k7, k8,
00553 k9>(matcher);
00554 }
00555
00556 template <int k1, int k2, int k3, int k4, int k5, int k6, int k7, int k8,
00557 int k9, int k10, typename InnerMatcher>
00558 inline internal::ArgsMatcher<InnerMatcher, k1, k2, k3, k4, k5, k6, k7, k8, k9,
00559 k10>
00560 Args(const InnerMatcher& matcher) {
00561 return internal::ArgsMatcher<InnerMatcher, k1, k2, k3, k4, k5, k6, k7, k8,
00562 k9, k10>(matcher);
00563 }
00564
00565
00566
00567
00568
00569
00570
00571
00572
00573
00574
00575
00576
00577
00578
00579 inline internal::ElementsAreMatcher<
00580 std::tr1::tuple<> >
00581 ElementsAre() {
00582 typedef std::tr1::tuple<> Args;
00583 return internal::ElementsAreMatcher<Args>(Args());
00584 }
00585
00586 template <typename T1>
00587 inline internal::ElementsAreMatcher<
00588 std::tr1::tuple<
00589 typename internal::DecayArray<T1>::type> >
00590 ElementsAre(const T1& e1) {
00591 typedef std::tr1::tuple<
00592 typename internal::DecayArray<T1>::type> Args;
00593 return internal::ElementsAreMatcher<Args>(Args(e1));
00594 }
00595
00596 template <typename T1, typename T2>
00597 inline internal::ElementsAreMatcher<
00598 std::tr1::tuple<
00599 typename internal::DecayArray<T1>::type,
00600 typename internal::DecayArray<T2>::type> >
00601 ElementsAre(const T1& e1, const T2& e2) {
00602 typedef std::tr1::tuple<
00603 typename internal::DecayArray<T1>::type,
00604 typename internal::DecayArray<T2>::type> Args;
00605 return internal::ElementsAreMatcher<Args>(Args(e1, e2));
00606 }
00607
00608 template <typename T1, typename T2, typename T3>
00609 inline internal::ElementsAreMatcher<
00610 std::tr1::tuple<
00611 typename internal::DecayArray<T1>::type,
00612 typename internal::DecayArray<T2>::type,
00613 typename internal::DecayArray<T3>::type> >
00614 ElementsAre(const T1& e1, const T2& e2, const T3& e3) {
00615 typedef std::tr1::tuple<
00616 typename internal::DecayArray<T1>::type,
00617 typename internal::DecayArray<T2>::type,
00618 typename internal::DecayArray<T3>::type> Args;
00619 return internal::ElementsAreMatcher<Args>(Args(e1, e2, e3));
00620 }
00621
00622 template <typename T1, typename T2, typename T3, typename T4>
00623 inline internal::ElementsAreMatcher<
00624 std::tr1::tuple<
00625 typename internal::DecayArray<T1>::type,
00626 typename internal::DecayArray<T2>::type,
00627 typename internal::DecayArray<T3>::type,
00628 typename internal::DecayArray<T4>::type> >
00629 ElementsAre(const T1& e1, const T2& e2, const T3& e3, const T4& e4) {
00630 typedef std::tr1::tuple<
00631 typename internal::DecayArray<T1>::type,
00632 typename internal::DecayArray<T2>::type,
00633 typename internal::DecayArray<T3>::type,
00634 typename internal::DecayArray<T4>::type> Args;
00635 return internal::ElementsAreMatcher<Args>(Args(e1, e2, e3, e4));
00636 }
00637
00638 template <typename T1, typename T2, typename T3, typename T4, typename T5>
00639 inline internal::ElementsAreMatcher<
00640 std::tr1::tuple<
00641 typename internal::DecayArray<T1>::type,
00642 typename internal::DecayArray<T2>::type,
00643 typename internal::DecayArray<T3>::type,
00644 typename internal::DecayArray<T4>::type,
00645 typename internal::DecayArray<T5>::type> >
00646 ElementsAre(const T1& e1, const T2& e2, const T3& e3, const T4& e4,
00647 const T5& e5) {
00648 typedef std::tr1::tuple<
00649 typename internal::DecayArray<T1>::type,
00650 typename internal::DecayArray<T2>::type,
00651 typename internal::DecayArray<T3>::type,
00652 typename internal::DecayArray<T4>::type,
00653 typename internal::DecayArray<T5>::type> Args;
00654 return internal::ElementsAreMatcher<Args>(Args(e1, e2, e3, e4, e5));
00655 }
00656
00657 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00658 typename T6>
00659 inline internal::ElementsAreMatcher<
00660 std::tr1::tuple<
00661 typename internal::DecayArray<T1>::type,
00662 typename internal::DecayArray<T2>::type,
00663 typename internal::DecayArray<T3>::type,
00664 typename internal::DecayArray<T4>::type,
00665 typename internal::DecayArray<T5>::type,
00666 typename internal::DecayArray<T6>::type> >
00667 ElementsAre(const T1& e1, const T2& e2, const T3& e3, const T4& e4,
00668 const T5& e5, const T6& e6) {
00669 typedef std::tr1::tuple<
00670 typename internal::DecayArray<T1>::type,
00671 typename internal::DecayArray<T2>::type,
00672 typename internal::DecayArray<T3>::type,
00673 typename internal::DecayArray<T4>::type,
00674 typename internal::DecayArray<T5>::type,
00675 typename internal::DecayArray<T6>::type> Args;
00676 return internal::ElementsAreMatcher<Args>(Args(e1, e2, e3, e4, e5, e6));
00677 }
00678
00679 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00680 typename T6, typename T7>
00681 inline internal::ElementsAreMatcher<
00682 std::tr1::tuple<
00683 typename internal::DecayArray<T1>::type,
00684 typename internal::DecayArray<T2>::type,
00685 typename internal::DecayArray<T3>::type,
00686 typename internal::DecayArray<T4>::type,
00687 typename internal::DecayArray<T5>::type,
00688 typename internal::DecayArray<T6>::type,
00689 typename internal::DecayArray<T7>::type> >
00690 ElementsAre(const T1& e1, const T2& e2, const T3& e3, const T4& e4,
00691 const T5& e5, const T6& e6, const T7& e7) {
00692 typedef std::tr1::tuple<
00693 typename internal::DecayArray<T1>::type,
00694 typename internal::DecayArray<T2>::type,
00695 typename internal::DecayArray<T3>::type,
00696 typename internal::DecayArray<T4>::type,
00697 typename internal::DecayArray<T5>::type,
00698 typename internal::DecayArray<T6>::type,
00699 typename internal::DecayArray<T7>::type> Args;
00700 return internal::ElementsAreMatcher<Args>(Args(e1, e2, e3, e4, e5, e6, e7));
00701 }
00702
00703 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00704 typename T6, typename T7, typename T8>
00705 inline internal::ElementsAreMatcher<
00706 std::tr1::tuple<
00707 typename internal::DecayArray<T1>::type,
00708 typename internal::DecayArray<T2>::type,
00709 typename internal::DecayArray<T3>::type,
00710 typename internal::DecayArray<T4>::type,
00711 typename internal::DecayArray<T5>::type,
00712 typename internal::DecayArray<T6>::type,
00713 typename internal::DecayArray<T7>::type,
00714 typename internal::DecayArray<T8>::type> >
00715 ElementsAre(const T1& e1, const T2& e2, const T3& e3, const T4& e4,
00716 const T5& e5, const T6& e6, const T7& e7, const T8& e8) {
00717 typedef std::tr1::tuple<
00718 typename internal::DecayArray<T1>::type,
00719 typename internal::DecayArray<T2>::type,
00720 typename internal::DecayArray<T3>::type,
00721 typename internal::DecayArray<T4>::type,
00722 typename internal::DecayArray<T5>::type,
00723 typename internal::DecayArray<T6>::type,
00724 typename internal::DecayArray<T7>::type,
00725 typename internal::DecayArray<T8>::type> Args;
00726 return internal::ElementsAreMatcher<Args>(Args(e1, e2, e3, e4, e5, e6, e7,
00727 e8));
00728 }
00729
00730 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00731 typename T6, typename T7, typename T8, typename T9>
00732 inline internal::ElementsAreMatcher<
00733 std::tr1::tuple<
00734 typename internal::DecayArray<T1>::type,
00735 typename internal::DecayArray<T2>::type,
00736 typename internal::DecayArray<T3>::type,
00737 typename internal::DecayArray<T4>::type,
00738 typename internal::DecayArray<T5>::type,
00739 typename internal::DecayArray<T6>::type,
00740 typename internal::DecayArray<T7>::type,
00741 typename internal::DecayArray<T8>::type,
00742 typename internal::DecayArray<T9>::type> >
00743 ElementsAre(const T1& e1, const T2& e2, const T3& e3, const T4& e4,
00744 const T5& e5, const T6& e6, const T7& e7, const T8& e8, const T9& e9) {
00745 typedef std::tr1::tuple<
00746 typename internal::DecayArray<T1>::type,
00747 typename internal::DecayArray<T2>::type,
00748 typename internal::DecayArray<T3>::type,
00749 typename internal::DecayArray<T4>::type,
00750 typename internal::DecayArray<T5>::type,
00751 typename internal::DecayArray<T6>::type,
00752 typename internal::DecayArray<T7>::type,
00753 typename internal::DecayArray<T8>::type,
00754 typename internal::DecayArray<T9>::type> Args;
00755 return internal::ElementsAreMatcher<Args>(Args(e1, e2, e3, e4, e5, e6, e7,
00756 e8, e9));
00757 }
00758
00759 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00760 typename T6, typename T7, typename T8, typename T9, typename T10>
00761 inline internal::ElementsAreMatcher<
00762 std::tr1::tuple<
00763 typename internal::DecayArray<T1>::type,
00764 typename internal::DecayArray<T2>::type,
00765 typename internal::DecayArray<T3>::type,
00766 typename internal::DecayArray<T4>::type,
00767 typename internal::DecayArray<T5>::type,
00768 typename internal::DecayArray<T6>::type,
00769 typename internal::DecayArray<T7>::type,
00770 typename internal::DecayArray<T8>::type,
00771 typename internal::DecayArray<T9>::type,
00772 typename internal::DecayArray<T10>::type> >
00773 ElementsAre(const T1& e1, const T2& e2, const T3& e3, const T4& e4,
00774 const T5& e5, const T6& e6, const T7& e7, const T8& e8, const T9& e9,
00775 const T10& e10) {
00776 typedef std::tr1::tuple<
00777 typename internal::DecayArray<T1>::type,
00778 typename internal::DecayArray<T2>::type,
00779 typename internal::DecayArray<T3>::type,
00780 typename internal::DecayArray<T4>::type,
00781 typename internal::DecayArray<T5>::type,
00782 typename internal::DecayArray<T6>::type,
00783 typename internal::DecayArray<T7>::type,
00784 typename internal::DecayArray<T8>::type,
00785 typename internal::DecayArray<T9>::type,
00786 typename internal::DecayArray<T10>::type> Args;
00787 return internal::ElementsAreMatcher<Args>(Args(e1, e2, e3, e4, e5, e6, e7,
00788 e8, e9, e10));
00789 }
00790
00791
00792
00793
00794 inline internal::UnorderedElementsAreMatcher<
00795 std::tr1::tuple<> >
00796 UnorderedElementsAre() {
00797 typedef std::tr1::tuple<> Args;
00798 return internal::UnorderedElementsAreMatcher<Args>(Args());
00799 }
00800
00801 template <typename T1>
00802 inline internal::UnorderedElementsAreMatcher<
00803 std::tr1::tuple<
00804 typename internal::DecayArray<T1>::type> >
00805 UnorderedElementsAre(const T1& e1) {
00806 typedef std::tr1::tuple<
00807 typename internal::DecayArray<T1>::type> Args;
00808 return internal::UnorderedElementsAreMatcher<Args>(Args(e1));
00809 }
00810
00811 template <typename T1, typename T2>
00812 inline internal::UnorderedElementsAreMatcher<
00813 std::tr1::tuple<
00814 typename internal::DecayArray<T1>::type,
00815 typename internal::DecayArray<T2>::type> >
00816 UnorderedElementsAre(const T1& e1, const T2& e2) {
00817 typedef std::tr1::tuple<
00818 typename internal::DecayArray<T1>::type,
00819 typename internal::DecayArray<T2>::type> Args;
00820 return internal::UnorderedElementsAreMatcher<Args>(Args(e1, e2));
00821 }
00822
00823 template <typename T1, typename T2, typename T3>
00824 inline internal::UnorderedElementsAreMatcher<
00825 std::tr1::tuple<
00826 typename internal::DecayArray<T1>::type,
00827 typename internal::DecayArray<T2>::type,
00828 typename internal::DecayArray<T3>::type> >
00829 UnorderedElementsAre(const T1& e1, const T2& e2, const T3& e3) {
00830 typedef std::tr1::tuple<
00831 typename internal::DecayArray<T1>::type,
00832 typename internal::DecayArray<T2>::type,
00833 typename internal::DecayArray<T3>::type> Args;
00834 return internal::UnorderedElementsAreMatcher<Args>(Args(e1, e2, e3));
00835 }
00836
00837 template <typename T1, typename T2, typename T3, typename T4>
00838 inline internal::UnorderedElementsAreMatcher<
00839 std::tr1::tuple<
00840 typename internal::DecayArray<T1>::type,
00841 typename internal::DecayArray<T2>::type,
00842 typename internal::DecayArray<T3>::type,
00843 typename internal::DecayArray<T4>::type> >
00844 UnorderedElementsAre(const T1& e1, const T2& e2, const T3& e3, const T4& e4) {
00845 typedef std::tr1::tuple<
00846 typename internal::DecayArray<T1>::type,
00847 typename internal::DecayArray<T2>::type,
00848 typename internal::DecayArray<T3>::type,
00849 typename internal::DecayArray<T4>::type> Args;
00850 return internal::UnorderedElementsAreMatcher<Args>(Args(e1, e2, e3, e4));
00851 }
00852
00853 template <typename T1, typename T2, typename T3, typename T4, typename T5>
00854 inline internal::UnorderedElementsAreMatcher<
00855 std::tr1::tuple<
00856 typename internal::DecayArray<T1>::type,
00857 typename internal::DecayArray<T2>::type,
00858 typename internal::DecayArray<T3>::type,
00859 typename internal::DecayArray<T4>::type,
00860 typename internal::DecayArray<T5>::type> >
00861 UnorderedElementsAre(const T1& e1, const T2& e2, const T3& e3, const T4& e4,
00862 const T5& e5) {
00863 typedef std::tr1::tuple<
00864 typename internal::DecayArray<T1>::type,
00865 typename internal::DecayArray<T2>::type,
00866 typename internal::DecayArray<T3>::type,
00867 typename internal::DecayArray<T4>::type,
00868 typename internal::DecayArray<T5>::type> Args;
00869 return internal::UnorderedElementsAreMatcher<Args>(Args(e1, e2, e3, e4, e5));
00870 }
00871
00872 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00873 typename T6>
00874 inline internal::UnorderedElementsAreMatcher<
00875 std::tr1::tuple<
00876 typename internal::DecayArray<T1>::type,
00877 typename internal::DecayArray<T2>::type,
00878 typename internal::DecayArray<T3>::type,
00879 typename internal::DecayArray<T4>::type,
00880 typename internal::DecayArray<T5>::type,
00881 typename internal::DecayArray<T6>::type> >
00882 UnorderedElementsAre(const T1& e1, const T2& e2, const T3& e3, const T4& e4,
00883 const T5& e5, const T6& e6) {
00884 typedef std::tr1::tuple<
00885 typename internal::DecayArray<T1>::type,
00886 typename internal::DecayArray<T2>::type,
00887 typename internal::DecayArray<T3>::type,
00888 typename internal::DecayArray<T4>::type,
00889 typename internal::DecayArray<T5>::type,
00890 typename internal::DecayArray<T6>::type> Args;
00891 return internal::UnorderedElementsAreMatcher<Args>(Args(e1, e2, e3, e4, e5,
00892 e6));
00893 }
00894
00895 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00896 typename T6, typename T7>
00897 inline internal::UnorderedElementsAreMatcher<
00898 std::tr1::tuple<
00899 typename internal::DecayArray<T1>::type,
00900 typename internal::DecayArray<T2>::type,
00901 typename internal::DecayArray<T3>::type,
00902 typename internal::DecayArray<T4>::type,
00903 typename internal::DecayArray<T5>::type,
00904 typename internal::DecayArray<T6>::type,
00905 typename internal::DecayArray<T7>::type> >
00906 UnorderedElementsAre(const T1& e1, const T2& e2, const T3& e3, const T4& e4,
00907 const T5& e5, const T6& e6, const T7& e7) {
00908 typedef std::tr1::tuple<
00909 typename internal::DecayArray<T1>::type,
00910 typename internal::DecayArray<T2>::type,
00911 typename internal::DecayArray<T3>::type,
00912 typename internal::DecayArray<T4>::type,
00913 typename internal::DecayArray<T5>::type,
00914 typename internal::DecayArray<T6>::type,
00915 typename internal::DecayArray<T7>::type> Args;
00916 return internal::UnorderedElementsAreMatcher<Args>(Args(e1, e2, e3, e4, e5,
00917 e6, e7));
00918 }
00919
00920 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00921 typename T6, typename T7, typename T8>
00922 inline internal::UnorderedElementsAreMatcher<
00923 std::tr1::tuple<
00924 typename internal::DecayArray<T1>::type,
00925 typename internal::DecayArray<T2>::type,
00926 typename internal::DecayArray<T3>::type,
00927 typename internal::DecayArray<T4>::type,
00928 typename internal::DecayArray<T5>::type,
00929 typename internal::DecayArray<T6>::type,
00930 typename internal::DecayArray<T7>::type,
00931 typename internal::DecayArray<T8>::type> >
00932 UnorderedElementsAre(const T1& e1, const T2& e2, const T3& e3, const T4& e4,
00933 const T5& e5, const T6& e6, const T7& e7, const T8& e8) {
00934 typedef std::tr1::tuple<
00935 typename internal::DecayArray<T1>::type,
00936 typename internal::DecayArray<T2>::type,
00937 typename internal::DecayArray<T3>::type,
00938 typename internal::DecayArray<T4>::type,
00939 typename internal::DecayArray<T5>::type,
00940 typename internal::DecayArray<T6>::type,
00941 typename internal::DecayArray<T7>::type,
00942 typename internal::DecayArray<T8>::type> Args;
00943 return internal::UnorderedElementsAreMatcher<Args>(Args(e1, e2, e3, e4, e5,
00944 e6, e7, e8));
00945 }
00946
00947 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00948 typename T6, typename T7, typename T8, typename T9>
00949 inline internal::UnorderedElementsAreMatcher<
00950 std::tr1::tuple<
00951 typename internal::DecayArray<T1>::type,
00952 typename internal::DecayArray<T2>::type,
00953 typename internal::DecayArray<T3>::type,
00954 typename internal::DecayArray<T4>::type,
00955 typename internal::DecayArray<T5>::type,
00956 typename internal::DecayArray<T6>::type,
00957 typename internal::DecayArray<T7>::type,
00958 typename internal::DecayArray<T8>::type,
00959 typename internal::DecayArray<T9>::type> >
00960 UnorderedElementsAre(const T1& e1, const T2& e2, const T3& e3, const T4& e4,
00961 const T5& e5, const T6& e6, const T7& e7, const T8& e8, const T9& e9) {
00962 typedef std::tr1::tuple<
00963 typename internal::DecayArray<T1>::type,
00964 typename internal::DecayArray<T2>::type,
00965 typename internal::DecayArray<T3>::type,
00966 typename internal::DecayArray<T4>::type,
00967 typename internal::DecayArray<T5>::type,
00968 typename internal::DecayArray<T6>::type,
00969 typename internal::DecayArray<T7>::type,
00970 typename internal::DecayArray<T8>::type,
00971 typename internal::DecayArray<T9>::type> Args;
00972 return internal::UnorderedElementsAreMatcher<Args>(Args(e1, e2, e3, e4, e5,
00973 e6, e7, e8, e9));
00974 }
00975
00976 template <typename T1, typename T2, typename T3, typename T4, typename T5,
00977 typename T6, typename T7, typename T8, typename T9, typename T10>
00978 inline internal::UnorderedElementsAreMatcher<
00979 std::tr1::tuple<
00980 typename internal::DecayArray<T1>::type,
00981 typename internal::DecayArray<T2>::type,
00982 typename internal::DecayArray<T3>::type,
00983 typename internal::DecayArray<T4>::type,
00984 typename internal::DecayArray<T5>::type,
00985 typename internal::DecayArray<T6>::type,
00986 typename internal::DecayArray<T7>::type,
00987 typename internal::DecayArray<T8>::type,
00988 typename internal::DecayArray<T9>::type,
00989 typename internal::DecayArray<T10>::type> >
00990 UnorderedElementsAre(const T1& e1, const T2& e2, const T3& e3, const T4& e4,
00991 const T5& e5, const T6& e6, const T7& e7, const T8& e8, const T9& e9,
00992 const T10& e10) {
00993 typedef std::tr1::tuple<
00994 typename internal::DecayArray<T1>::type,
00995 typename internal::DecayArray<T2>::type,
00996 typename internal::DecayArray<T3>::type,
00997 typename internal::DecayArray<T4>::type,
00998 typename internal::DecayArray<T5>::type,
00999 typename internal::DecayArray<T6>::type,
01000 typename internal::DecayArray<T7>::type,
01001 typename internal::DecayArray<T8>::type,
01002 typename internal::DecayArray<T9>::type,
01003 typename internal::DecayArray<T10>::type> Args;
01004 return internal::UnorderedElementsAreMatcher<Args>(Args(e1, e2, e3, e4, e5,
01005 e6, e7, e8, e9, e10));
01006 }
01007
01008
01009
01010
01011 template <typename M1, typename M2>
01012 inline typename internal::AllOfResult2<M1, M2>::type
01013 AllOf(M1 m1, M2 m2) {
01014 return typename internal::AllOfResult2<M1, M2>::type(
01015 m1,
01016 m2);
01017 }
01018
01019 template <typename M1, typename M2, typename M3>
01020 inline typename internal::AllOfResult3<M1, M2, M3>::type
01021 AllOf(M1 m1, M2 m2, M3 m3) {
01022 return typename internal::AllOfResult3<M1, M2, M3>::type(
01023 m1,
01024 ::testing::AllOf(m2, m3));
01025 }
01026
01027 template <typename M1, typename M2, typename M3, typename M4>
01028 inline typename internal::AllOfResult4<M1, M2, M3, M4>::type
01029 AllOf(M1 m1, M2 m2, M3 m3, M4 m4) {
01030 return typename internal::AllOfResult4<M1, M2, M3, M4>::type(
01031 ::testing::AllOf(m1, m2),
01032 ::testing::AllOf(m3, m4));
01033 }
01034
01035 template <typename M1, typename M2, typename M3, typename M4, typename M5>
01036 inline typename internal::AllOfResult5<M1, M2, M3, M4, M5>::type
01037 AllOf(M1 m1, M2 m2, M3 m3, M4 m4, M5 m5) {
01038 return typename internal::AllOfResult5<M1, M2, M3, M4, M5>::type(
01039 ::testing::AllOf(m1, m2),
01040 ::testing::AllOf(m3, m4, m5));
01041 }
01042
01043 template <typename M1, typename M2, typename M3, typename M4, typename M5,
01044 typename M6>
01045 inline typename internal::AllOfResult6<M1, M2, M3, M4, M5, M6>::type
01046 AllOf(M1 m1, M2 m2, M3 m3, M4 m4, M5 m5, M6 m6) {
01047 return typename internal::AllOfResult6<M1, M2, M3, M4, M5, M6>::type(
01048 ::testing::AllOf(m1, m2, m3),
01049 ::testing::AllOf(m4, m5, m6));
01050 }
01051
01052 template <typename M1, typename M2, typename M3, typename M4, typename M5,
01053 typename M6, typename M7>
01054 inline typename internal::AllOfResult7<M1, M2, M3, M4, M5, M6, M7>::type
01055 AllOf(M1 m1, M2 m2, M3 m3, M4 m4, M5 m5, M6 m6, M7 m7) {
01056 return typename internal::AllOfResult7<M1, M2, M3, M4, M5, M6, M7>::type(
01057 ::testing::AllOf(m1, m2, m3),
01058 ::testing::AllOf(m4, m5, m6, m7));
01059 }
01060
01061 template <typename M1, typename M2, typename M3, typename M4, typename M5,
01062 typename M6, typename M7, typename M8>
01063 inline typename internal::AllOfResult8<M1, M2, M3, M4, M5, M6, M7, M8>::type
01064 AllOf(M1 m1, M2 m2, M3 m3, M4 m4, M5 m5, M6 m6, M7 m7, M8 m8) {
01065 return typename internal::AllOfResult8<M1, M2, M3, M4, M5, M6, M7, M8>::type(
01066 ::testing::AllOf(m1, m2, m3, m4),
01067 ::testing::AllOf(m5, m6, m7, m8));
01068 }
01069
01070 template <typename M1, typename M2, typename M3, typename M4, typename M5,
01071 typename M6, typename M7, typename M8, typename M9>
01072 inline typename internal::AllOfResult9<M1, M2, M3, M4, M5, M6, M7, M8, M9>::type
01073 AllOf(M1 m1, M2 m2, M3 m3, M4 m4, M5 m5, M6 m6, M7 m7, M8 m8, M9 m9) {
01074 return typename internal::AllOfResult9<M1, M2, M3, M4, M5, M6, M7, M8,
01075 M9>::type(
01076 ::testing::AllOf(m1, m2, m3, m4),
01077 ::testing::AllOf(m5, m6, m7, m8, m9));
01078 }
01079
01080 template <typename M1, typename M2, typename M3, typename M4, typename M5,
01081 typename M6, typename M7, typename M8, typename M9, typename M10>
01082 inline typename internal::AllOfResult10<M1, M2, M3, M4, M5, M6, M7, M8, M9,
01083 M10>::type
01084 AllOf(M1 m1, M2 m2, M3 m3, M4 m4, M5 m5, M6 m6, M7 m7, M8 m8, M9 m9, M10 m10) {
01085 return typename internal::AllOfResult10<M1, M2, M3, M4, M5, M6, M7, M8, M9,
01086 M10>::type(
01087 ::testing::AllOf(m1, m2, m3, m4, m5),
01088 ::testing::AllOf(m6, m7, m8, m9, m10));
01089 }
01090
01091
01092
01093
01094 template <typename M1, typename M2>
01095 inline typename internal::AnyOfResult2<M1, M2>::type
01096 AnyOf(M1 m1, M2 m2) {
01097 return typename internal::AnyOfResult2<M1, M2>::type(
01098 m1,
01099 m2);
01100 }
01101
01102 template <typename M1, typename M2, typename M3>
01103 inline typename internal::AnyOfResult3<M1, M2, M3>::type
01104 AnyOf(M1 m1, M2 m2, M3 m3) {
01105 return typename internal::AnyOfResult3<M1, M2, M3>::type(
01106 m1,
01107 ::testing::AnyOf(m2, m3));
01108 }
01109
01110 template <typename M1, typename M2, typename M3, typename M4>
01111 inline typename internal::AnyOfResult4<M1, M2, M3, M4>::type
01112 AnyOf(M1 m1, M2 m2, M3 m3, M4 m4) {
01113 return typename internal::AnyOfResult4<M1, M2, M3, M4>::type(
01114 ::testing::AnyOf(m1, m2),
01115 ::testing::AnyOf(m3, m4));
01116 }
01117
01118 template <typename M1, typename M2, typename M3, typename M4, typename M5>
01119 inline typename internal::AnyOfResult5<M1, M2, M3, M4, M5>::type
01120 AnyOf(M1 m1, M2 m2, M3 m3, M4 m4, M5 m5) {
01121 return typename internal::AnyOfResult5<M1, M2, M3, M4, M5>::type(
01122 ::testing::AnyOf(m1, m2),
01123 ::testing::AnyOf(m3, m4, m5));
01124 }
01125
01126 template <typename M1, typename M2, typename M3, typename M4, typename M5,
01127 typename M6>
01128 inline typename internal::AnyOfResult6<M1, M2, M3, M4, M5, M6>::type
01129 AnyOf(M1 m1, M2 m2, M3 m3, M4 m4, M5 m5, M6 m6) {
01130 return typename internal::AnyOfResult6<M1, M2, M3, M4, M5, M6>::type(
01131 ::testing::AnyOf(m1, m2, m3),
01132 ::testing::AnyOf(m4, m5, m6));
01133 }
01134
01135 template <typename M1, typename M2, typename M3, typename M4, typename M5,
01136 typename M6, typename M7>
01137 inline typename internal::AnyOfResult7<M1, M2, M3, M4, M5, M6, M7>::type
01138 AnyOf(M1 m1, M2 m2, M3 m3, M4 m4, M5 m5, M6 m6, M7 m7) {
01139 return typename internal::AnyOfResult7<M1, M2, M3, M4, M5, M6, M7>::type(
01140 ::testing::AnyOf(m1, m2, m3),
01141 ::testing::AnyOf(m4, m5, m6, m7));
01142 }
01143
01144 template <typename M1, typename M2, typename M3, typename M4, typename M5,
01145 typename M6, typename M7, typename M8>
01146 inline typename internal::AnyOfResult8<M1, M2, M3, M4, M5, M6, M7, M8>::type
01147 AnyOf(M1 m1, M2 m2, M3 m3, M4 m4, M5 m5, M6 m6, M7 m7, M8 m8) {
01148 return typename internal::AnyOfResult8<M1, M2, M3, M4, M5, M6, M7, M8>::type(
01149 ::testing::AnyOf(m1, m2, m3, m4),
01150 ::testing::AnyOf(m5, m6, m7, m8));
01151 }
01152
01153 template <typename M1, typename M2, typename M3, typename M4, typename M5,
01154 typename M6, typename M7, typename M8, typename M9>
01155 inline typename internal::AnyOfResult9<M1, M2, M3, M4, M5, M6, M7, M8, M9>::type
01156 AnyOf(M1 m1, M2 m2, M3 m3, M4 m4, M5 m5, M6 m6, M7 m7, M8 m8, M9 m9) {
01157 return typename internal::AnyOfResult9<M1, M2, M3, M4, M5, M6, M7, M8,
01158 M9>::type(
01159 ::testing::AnyOf(m1, m2, m3, m4),
01160 ::testing::AnyOf(m5, m6, m7, m8, m9));
01161 }
01162
01163 template <typename M1, typename M2, typename M3, typename M4, typename M5,
01164 typename M6, typename M7, typename M8, typename M9, typename M10>
01165 inline typename internal::AnyOfResult10<M1, M2, M3, M4, M5, M6, M7, M8, M9,
01166 M10>::type
01167 AnyOf(M1 m1, M2 m2, M3 m3, M4 m4, M5 m5, M6 m6, M7 m7, M8 m8, M9 m9, M10 m10) {
01168 return typename internal::AnyOfResult10<M1, M2, M3, M4, M5, M6, M7, M8, M9,
01169 M10>::type(
01170 ::testing::AnyOf(m1, m2, m3, m4, m5),
01171 ::testing::AnyOf(m6, m7, m8, m9, m10));
01172 }
01173
01174 }
01175
01176
01177
01178
01179
01180
01181
01182
01183
01184
01185
01186
01187
01188
01189
01190
01191
01192
01193
01194
01195
01196
01197
01198
01199
01200
01201
01202
01203
01204
01205
01206
01207
01208
01209
01210
01211
01212
01213
01214
01215
01216
01217
01218
01219
01220
01221
01222
01223
01224
01225
01226
01227
01228
01229
01230
01231
01232
01233
01234
01235
01236
01237
01238
01239
01240
01241
01242
01243
01244
01245
01246
01247
01248
01249
01250
01251
01252
01253
01254
01255
01256
01257
01258
01259
01260
01261
01262
01263
01264
01265
01266
01267
01268
01269
01270
01271
01272
01273
01274
01275
01276
01277
01278
01279
01280
01281
01282
01283
01284
01285
01286
01287
01288
01289
01290
01291
01292
01293
01294
01295
01296
01297
01298
01299
01300
01301
01302
01303
01304
01305
01306
01307
01308
01309
01310
01311
01312
01313
01314
01315
01316
01317
01318
01319
01320
01321
01322
01323
01324
01325
01326
01327
01328
01329
01330
01331
01332
01333
01334
01335
01336
01337
01338
01339
01340
01341
01342
01343
01344
01345
01346
01347
01348
01349
01350
01351
01352
01353
01354
01355
01357
01358
01359
01360
01361
01362
01363
01364
01365
01366
01367
01368
01369
01370
01371
01372
01373
01374
01375
01376
01377
01378
01379
01380
01381
01382
01383
01384
01385
01386
01387
01388
01389
01390
01391
01392 #define MATCHER(name, description)\
01393 class name##Matcher {\
01394 public:\
01395 template <typename arg_type>\
01396 class gmock_Impl : public ::testing::MatcherInterface<arg_type> {\
01397 public:\
01398 gmock_Impl()\
01399 {}\
01400 virtual bool MatchAndExplain(\
01401 arg_type arg, ::testing::MatchResultListener* result_listener) const;\
01402 virtual void DescribeTo(::std::ostream* gmock_os) const {\
01403 *gmock_os << FormatDescription(false);\
01404 }\
01405 virtual void DescribeNegationTo(::std::ostream* gmock_os) const {\
01406 *gmock_os << FormatDescription(true);\
01407 }\
01408 private:\
01409 ::testing::internal::string FormatDescription(bool negation) const {\
01410 const ::testing::internal::string gmock_description = (description);\
01411 if (!gmock_description.empty())\
01412 return gmock_description;\
01413 return ::testing::internal::FormatMatcherDescription(\
01414 negation, #name, \
01415 ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\
01416 ::std::tr1::tuple<>()));\
01417 }\
01418 GTEST_DISALLOW_ASSIGN_(gmock_Impl);\
01419 };\
01420 template <typename arg_type>\
01421 operator ::testing::Matcher<arg_type>() const {\
01422 return ::testing::Matcher<arg_type>(\
01423 new gmock_Impl<arg_type>());\
01424 }\
01425 name##Matcher() {\
01426 }\
01427 private:\
01428 GTEST_DISALLOW_ASSIGN_(name##Matcher);\
01429 };\
01430 inline name##Matcher name() {\
01431 return name##Matcher();\
01432 }\
01433 template <typename arg_type>\
01434 bool name##Matcher::gmock_Impl<arg_type>::MatchAndExplain(\
01435 arg_type arg, \
01436 ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\
01437 const
01438
01439 #define MATCHER_P(name, p0, description)\
01440 template <typename p0##_type>\
01441 class name##MatcherP {\
01442 public:\
01443 template <typename arg_type>\
01444 class gmock_Impl : public ::testing::MatcherInterface<arg_type> {\
01445 public:\
01446 explicit gmock_Impl(p0##_type gmock_p0)\
01447 : p0(gmock_p0) {}\
01448 virtual bool MatchAndExplain(\
01449 arg_type arg, ::testing::MatchResultListener* result_listener) const;\
01450 virtual void DescribeTo(::std::ostream* gmock_os) const {\
01451 *gmock_os << FormatDescription(false);\
01452 }\
01453 virtual void DescribeNegationTo(::std::ostream* gmock_os) const {\
01454 *gmock_os << FormatDescription(true);\
01455 }\
01456 p0##_type p0;\
01457 private:\
01458 ::testing::internal::string FormatDescription(bool negation) const {\
01459 const ::testing::internal::string gmock_description = (description);\
01460 if (!gmock_description.empty())\
01461 return gmock_description;\
01462 return ::testing::internal::FormatMatcherDescription(\
01463 negation, #name, \
01464 ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\
01465 ::std::tr1::tuple<p0##_type>(p0)));\
01466 }\
01467 GTEST_DISALLOW_ASSIGN_(gmock_Impl);\
01468 };\
01469 template <typename arg_type>\
01470 operator ::testing::Matcher<arg_type>() const {\
01471 return ::testing::Matcher<arg_type>(\
01472 new gmock_Impl<arg_type>(p0));\
01473 }\
01474 name##MatcherP(p0##_type gmock_p0) : p0(gmock_p0) {\
01475 }\
01476 p0##_type p0;\
01477 private:\
01478 GTEST_DISALLOW_ASSIGN_(name##MatcherP);\
01479 };\
01480 template <typename p0##_type>\
01481 inline name##MatcherP<p0##_type> name(p0##_type p0) {\
01482 return name##MatcherP<p0##_type>(p0);\
01483 }\
01484 template <typename p0##_type>\
01485 template <typename arg_type>\
01486 bool name##MatcherP<p0##_type>::gmock_Impl<arg_type>::MatchAndExplain(\
01487 arg_type arg, \
01488 ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\
01489 const
01490
01491 #define MATCHER_P2(name, p0, p1, description)\
01492 template <typename p0##_type, typename p1##_type>\
01493 class name##MatcherP2 {\
01494 public:\
01495 template <typename arg_type>\
01496 class gmock_Impl : public ::testing::MatcherInterface<arg_type> {\
01497 public:\
01498 gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1)\
01499 : p0(gmock_p0), p1(gmock_p1) {}\
01500 virtual bool MatchAndExplain(\
01501 arg_type arg, ::testing::MatchResultListener* result_listener) const;\
01502 virtual void DescribeTo(::std::ostream* gmock_os) const {\
01503 *gmock_os << FormatDescription(false);\
01504 }\
01505 virtual void DescribeNegationTo(::std::ostream* gmock_os) const {\
01506 *gmock_os << FormatDescription(true);\
01507 }\
01508 p0##_type p0;\
01509 p1##_type p1;\
01510 private:\
01511 ::testing::internal::string FormatDescription(bool negation) const {\
01512 const ::testing::internal::string gmock_description = (description);\
01513 if (!gmock_description.empty())\
01514 return gmock_description;\
01515 return ::testing::internal::FormatMatcherDescription(\
01516 negation, #name, \
01517 ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\
01518 ::std::tr1::tuple<p0##_type, p1##_type>(p0, p1)));\
01519 }\
01520 GTEST_DISALLOW_ASSIGN_(gmock_Impl);\
01521 };\
01522 template <typename arg_type>\
01523 operator ::testing::Matcher<arg_type>() const {\
01524 return ::testing::Matcher<arg_type>(\
01525 new gmock_Impl<arg_type>(p0, p1));\
01526 }\
01527 name##MatcherP2(p0##_type gmock_p0, p1##_type gmock_p1) : p0(gmock_p0), \
01528 p1(gmock_p1) {\
01529 }\
01530 p0##_type p0;\
01531 p1##_type p1;\
01532 private:\
01533 GTEST_DISALLOW_ASSIGN_(name##MatcherP2);\
01534 };\
01535 template <typename p0##_type, typename p1##_type>\
01536 inline name##MatcherP2<p0##_type, p1##_type> name(p0##_type p0, \
01537 p1##_type p1) {\
01538 return name##MatcherP2<p0##_type, p1##_type>(p0, p1);\
01539 }\
01540 template <typename p0##_type, typename p1##_type>\
01541 template <typename arg_type>\
01542 bool name##MatcherP2<p0##_type, \
01543 p1##_type>::gmock_Impl<arg_type>::MatchAndExplain(\
01544 arg_type arg, \
01545 ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\
01546 const
01547
01548 #define MATCHER_P3(name, p0, p1, p2, description)\
01549 template <typename p0##_type, typename p1##_type, typename p2##_type>\
01550 class name##MatcherP3 {\
01551 public:\
01552 template <typename arg_type>\
01553 class gmock_Impl : public ::testing::MatcherInterface<arg_type> {\
01554 public:\
01555 gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2)\
01556 : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2) {}\
01557 virtual bool MatchAndExplain(\
01558 arg_type arg, ::testing::MatchResultListener* result_listener) const;\
01559 virtual void DescribeTo(::std::ostream* gmock_os) const {\
01560 *gmock_os << FormatDescription(false);\
01561 }\
01562 virtual void DescribeNegationTo(::std::ostream* gmock_os) const {\
01563 *gmock_os << FormatDescription(true);\
01564 }\
01565 p0##_type p0;\
01566 p1##_type p1;\
01567 p2##_type p2;\
01568 private:\
01569 ::testing::internal::string FormatDescription(bool negation) const {\
01570 const ::testing::internal::string gmock_description = (description);\
01571 if (!gmock_description.empty())\
01572 return gmock_description;\
01573 return ::testing::internal::FormatMatcherDescription(\
01574 negation, #name, \
01575 ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\
01576 ::std::tr1::tuple<p0##_type, p1##_type, p2##_type>(p0, p1, \
01577 p2)));\
01578 }\
01579 GTEST_DISALLOW_ASSIGN_(gmock_Impl);\
01580 };\
01581 template <typename arg_type>\
01582 operator ::testing::Matcher<arg_type>() const {\
01583 return ::testing::Matcher<arg_type>(\
01584 new gmock_Impl<arg_type>(p0, p1, p2));\
01585 }\
01586 name##MatcherP3(p0##_type gmock_p0, p1##_type gmock_p1, \
01587 p2##_type gmock_p2) : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2) {\
01588 }\
01589 p0##_type p0;\
01590 p1##_type p1;\
01591 p2##_type p2;\
01592 private:\
01593 GTEST_DISALLOW_ASSIGN_(name##MatcherP3);\
01594 };\
01595 template <typename p0##_type, typename p1##_type, typename p2##_type>\
01596 inline name##MatcherP3<p0##_type, p1##_type, p2##_type> name(p0##_type p0, \
01597 p1##_type p1, p2##_type p2) {\
01598 return name##MatcherP3<p0##_type, p1##_type, p2##_type>(p0, p1, p2);\
01599 }\
01600 template <typename p0##_type, typename p1##_type, typename p2##_type>\
01601 template <typename arg_type>\
01602 bool name##MatcherP3<p0##_type, p1##_type, \
01603 p2##_type>::gmock_Impl<arg_type>::MatchAndExplain(\
01604 arg_type arg, \
01605 ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\
01606 const
01607
01608 #define MATCHER_P4(name, p0, p1, p2, p3, description)\
01609 template <typename p0##_type, typename p1##_type, typename p2##_type, \
01610 typename p3##_type>\
01611 class name##MatcherP4 {\
01612 public:\
01613 template <typename arg_type>\
01614 class gmock_Impl : public ::testing::MatcherInterface<arg_type> {\
01615 public:\
01616 gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \
01617 p3##_type gmock_p3)\
01618 : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2), p3(gmock_p3) {}\
01619 virtual bool MatchAndExplain(\
01620 arg_type arg, ::testing::MatchResultListener* result_listener) const;\
01621 virtual void DescribeTo(::std::ostream* gmock_os) const {\
01622 *gmock_os << FormatDescription(false);\
01623 }\
01624 virtual void DescribeNegationTo(::std::ostream* gmock_os) const {\
01625 *gmock_os << FormatDescription(true);\
01626 }\
01627 p0##_type p0;\
01628 p1##_type p1;\
01629 p2##_type p2;\
01630 p3##_type p3;\
01631 private:\
01632 ::testing::internal::string FormatDescription(bool negation) const {\
01633 const ::testing::internal::string gmock_description = (description);\
01634 if (!gmock_description.empty())\
01635 return gmock_description;\
01636 return ::testing::internal::FormatMatcherDescription(\
01637 negation, #name, \
01638 ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\
01639 ::std::tr1::tuple<p0##_type, p1##_type, p2##_type, \
01640 p3##_type>(p0, p1, p2, p3)));\
01641 }\
01642 GTEST_DISALLOW_ASSIGN_(gmock_Impl);\
01643 };\
01644 template <typename arg_type>\
01645 operator ::testing::Matcher<arg_type>() const {\
01646 return ::testing::Matcher<arg_type>(\
01647 new gmock_Impl<arg_type>(p0, p1, p2, p3));\
01648 }\
01649 name##MatcherP4(p0##_type gmock_p0, p1##_type gmock_p1, \
01650 p2##_type gmock_p2, p3##_type gmock_p3) : p0(gmock_p0), p1(gmock_p1), \
01651 p2(gmock_p2), p3(gmock_p3) {\
01652 }\
01653 p0##_type p0;\
01654 p1##_type p1;\
01655 p2##_type p2;\
01656 p3##_type p3;\
01657 private:\
01658 GTEST_DISALLOW_ASSIGN_(name##MatcherP4);\
01659 };\
01660 template <typename p0##_type, typename p1##_type, typename p2##_type, \
01661 typename p3##_type>\
01662 inline name##MatcherP4<p0##_type, p1##_type, p2##_type, \
01663 p3##_type> name(p0##_type p0, p1##_type p1, p2##_type p2, \
01664 p3##_type p3) {\
01665 return name##MatcherP4<p0##_type, p1##_type, p2##_type, p3##_type>(p0, \
01666 p1, p2, p3);\
01667 }\
01668 template <typename p0##_type, typename p1##_type, typename p2##_type, \
01669 typename p3##_type>\
01670 template <typename arg_type>\
01671 bool name##MatcherP4<p0##_type, p1##_type, p2##_type, \
01672 p3##_type>::gmock_Impl<arg_type>::MatchAndExplain(\
01673 arg_type arg, \
01674 ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\
01675 const
01676
01677 #define MATCHER_P5(name, p0, p1, p2, p3, p4, description)\
01678 template <typename p0##_type, typename p1##_type, typename p2##_type, \
01679 typename p3##_type, typename p4##_type>\
01680 class name##MatcherP5 {\
01681 public:\
01682 template <typename arg_type>\
01683 class gmock_Impl : public ::testing::MatcherInterface<arg_type> {\
01684 public:\
01685 gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \
01686 p3##_type gmock_p3, p4##_type gmock_p4)\
01687 : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2), p3(gmock_p3), \
01688 p4(gmock_p4) {}\
01689 virtual bool MatchAndExplain(\
01690 arg_type arg, ::testing::MatchResultListener* result_listener) const;\
01691 virtual void DescribeTo(::std::ostream* gmock_os) const {\
01692 *gmock_os << FormatDescription(false);\
01693 }\
01694 virtual void DescribeNegationTo(::std::ostream* gmock_os) const {\
01695 *gmock_os << FormatDescription(true);\
01696 }\
01697 p0##_type p0;\
01698 p1##_type p1;\
01699 p2##_type p2;\
01700 p3##_type p3;\
01701 p4##_type p4;\
01702 private:\
01703 ::testing::internal::string FormatDescription(bool negation) const {\
01704 const ::testing::internal::string gmock_description = (description);\
01705 if (!gmock_description.empty())\
01706 return gmock_description;\
01707 return ::testing::internal::FormatMatcherDescription(\
01708 negation, #name, \
01709 ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\
01710 ::std::tr1::tuple<p0##_type, p1##_type, p2##_type, p3##_type, \
01711 p4##_type>(p0, p1, p2, p3, p4)));\
01712 }\
01713 GTEST_DISALLOW_ASSIGN_(gmock_Impl);\
01714 };\
01715 template <typename arg_type>\
01716 operator ::testing::Matcher<arg_type>() const {\
01717 return ::testing::Matcher<arg_type>(\
01718 new gmock_Impl<arg_type>(p0, p1, p2, p3, p4));\
01719 }\
01720 name##MatcherP5(p0##_type gmock_p0, p1##_type gmock_p1, \
01721 p2##_type gmock_p2, p3##_type gmock_p3, \
01722 p4##_type gmock_p4) : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2), \
01723 p3(gmock_p3), p4(gmock_p4) {\
01724 }\
01725 p0##_type p0;\
01726 p1##_type p1;\
01727 p2##_type p2;\
01728 p3##_type p3;\
01729 p4##_type p4;\
01730 private:\
01731 GTEST_DISALLOW_ASSIGN_(name##MatcherP5);\
01732 };\
01733 template <typename p0##_type, typename p1##_type, typename p2##_type, \
01734 typename p3##_type, typename p4##_type>\
01735 inline name##MatcherP5<p0##_type, p1##_type, p2##_type, p3##_type, \
01736 p4##_type> name(p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, \
01737 p4##_type p4) {\
01738 return name##MatcherP5<p0##_type, p1##_type, p2##_type, p3##_type, \
01739 p4##_type>(p0, p1, p2, p3, p4);\
01740 }\
01741 template <typename p0##_type, typename p1##_type, typename p2##_type, \
01742 typename p3##_type, typename p4##_type>\
01743 template <typename arg_type>\
01744 bool name##MatcherP5<p0##_type, p1##_type, p2##_type, p3##_type, \
01745 p4##_type>::gmock_Impl<arg_type>::MatchAndExplain(\
01746 arg_type arg, \
01747 ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\
01748 const
01749
01750 #define MATCHER_P6(name, p0, p1, p2, p3, p4, p5, description)\
01751 template <typename p0##_type, typename p1##_type, typename p2##_type, \
01752 typename p3##_type, typename p4##_type, typename p5##_type>\
01753 class name##MatcherP6 {\
01754 public:\
01755 template <typename arg_type>\
01756 class gmock_Impl : public ::testing::MatcherInterface<arg_type> {\
01757 public:\
01758 gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \
01759 p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5)\
01760 : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2), p3(gmock_p3), \
01761 p4(gmock_p4), p5(gmock_p5) {}\
01762 virtual bool MatchAndExplain(\
01763 arg_type arg, ::testing::MatchResultListener* result_listener) const;\
01764 virtual void DescribeTo(::std::ostream* gmock_os) const {\
01765 *gmock_os << FormatDescription(false);\
01766 }\
01767 virtual void DescribeNegationTo(::std::ostream* gmock_os) const {\
01768 *gmock_os << FormatDescription(true);\
01769 }\
01770 p0##_type p0;\
01771 p1##_type p1;\
01772 p2##_type p2;\
01773 p3##_type p3;\
01774 p4##_type p4;\
01775 p5##_type p5;\
01776 private:\
01777 ::testing::internal::string FormatDescription(bool negation) const {\
01778 const ::testing::internal::string gmock_description = (description);\
01779 if (!gmock_description.empty())\
01780 return gmock_description;\
01781 return ::testing::internal::FormatMatcherDescription(\
01782 negation, #name, \
01783 ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\
01784 ::std::tr1::tuple<p0##_type, p1##_type, p2##_type, p3##_type, \
01785 p4##_type, p5##_type>(p0, p1, p2, p3, p4, p5)));\
01786 }\
01787 GTEST_DISALLOW_ASSIGN_(gmock_Impl);\
01788 };\
01789 template <typename arg_type>\
01790 operator ::testing::Matcher<arg_type>() const {\
01791 return ::testing::Matcher<arg_type>(\
01792 new gmock_Impl<arg_type>(p0, p1, p2, p3, p4, p5));\
01793 }\
01794 name##MatcherP6(p0##_type gmock_p0, p1##_type gmock_p1, \
01795 p2##_type gmock_p2, p3##_type gmock_p3, p4##_type gmock_p4, \
01796 p5##_type gmock_p5) : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2), \
01797 p3(gmock_p3), p4(gmock_p4), p5(gmock_p5) {\
01798 }\
01799 p0##_type p0;\
01800 p1##_type p1;\
01801 p2##_type p2;\
01802 p3##_type p3;\
01803 p4##_type p4;\
01804 p5##_type p5;\
01805 private:\
01806 GTEST_DISALLOW_ASSIGN_(name##MatcherP6);\
01807 };\
01808 template <typename p0##_type, typename p1##_type, typename p2##_type, \
01809 typename p3##_type, typename p4##_type, typename p5##_type>\
01810 inline name##MatcherP6<p0##_type, p1##_type, p2##_type, p3##_type, \
01811 p4##_type, p5##_type> name(p0##_type p0, p1##_type p1, p2##_type p2, \
01812 p3##_type p3, p4##_type p4, p5##_type p5) {\
01813 return name##MatcherP6<p0##_type, p1##_type, p2##_type, p3##_type, \
01814 p4##_type, p5##_type>(p0, p1, p2, p3, p4, p5);\
01815 }\
01816 template <typename p0##_type, typename p1##_type, typename p2##_type, \
01817 typename p3##_type, typename p4##_type, typename p5##_type>\
01818 template <typename arg_type>\
01819 bool name##MatcherP6<p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, \
01820 p5##_type>::gmock_Impl<arg_type>::MatchAndExplain(\
01821 arg_type arg, \
01822 ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\
01823 const
01824
01825 #define MATCHER_P7(name, p0, p1, p2, p3, p4, p5, p6, description)\
01826 template <typename p0##_type, typename p1##_type, typename p2##_type, \
01827 typename p3##_type, typename p4##_type, typename p5##_type, \
01828 typename p6##_type>\
01829 class name##MatcherP7 {\
01830 public:\
01831 template <typename arg_type>\
01832 class gmock_Impl : public ::testing::MatcherInterface<arg_type> {\
01833 public:\
01834 gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \
01835 p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \
01836 p6##_type gmock_p6)\
01837 : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2), p3(gmock_p3), \
01838 p4(gmock_p4), p5(gmock_p5), p6(gmock_p6) {}\
01839 virtual bool MatchAndExplain(\
01840 arg_type arg, ::testing::MatchResultListener* result_listener) const;\
01841 virtual void DescribeTo(::std::ostream* gmock_os) const {\
01842 *gmock_os << FormatDescription(false);\
01843 }\
01844 virtual void DescribeNegationTo(::std::ostream* gmock_os) const {\
01845 *gmock_os << FormatDescription(true);\
01846 }\
01847 p0##_type p0;\
01848 p1##_type p1;\
01849 p2##_type p2;\
01850 p3##_type p3;\
01851 p4##_type p4;\
01852 p5##_type p5;\
01853 p6##_type p6;\
01854 private:\
01855 ::testing::internal::string FormatDescription(bool negation) const {\
01856 const ::testing::internal::string gmock_description = (description);\
01857 if (!gmock_description.empty())\
01858 return gmock_description;\
01859 return ::testing::internal::FormatMatcherDescription(\
01860 negation, #name, \
01861 ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\
01862 ::std::tr1::tuple<p0##_type, p1##_type, p2##_type, p3##_type, \
01863 p4##_type, p5##_type, p6##_type>(p0, p1, p2, p3, p4, p5, \
01864 p6)));\
01865 }\
01866 GTEST_DISALLOW_ASSIGN_(gmock_Impl);\
01867 };\
01868 template <typename arg_type>\
01869 operator ::testing::Matcher<arg_type>() const {\
01870 return ::testing::Matcher<arg_type>(\
01871 new gmock_Impl<arg_type>(p0, p1, p2, p3, p4, p5, p6));\
01872 }\
01873 name##MatcherP7(p0##_type gmock_p0, p1##_type gmock_p1, \
01874 p2##_type gmock_p2, p3##_type gmock_p3, p4##_type gmock_p4, \
01875 p5##_type gmock_p5, p6##_type gmock_p6) : p0(gmock_p0), p1(gmock_p1), \
01876 p2(gmock_p2), p3(gmock_p3), p4(gmock_p4), p5(gmock_p5), \
01877 p6(gmock_p6) {\
01878 }\
01879 p0##_type p0;\
01880 p1##_type p1;\
01881 p2##_type p2;\
01882 p3##_type p3;\
01883 p4##_type p4;\
01884 p5##_type p5;\
01885 p6##_type p6;\
01886 private:\
01887 GTEST_DISALLOW_ASSIGN_(name##MatcherP7);\
01888 };\
01889 template <typename p0##_type, typename p1##_type, typename p2##_type, \
01890 typename p3##_type, typename p4##_type, typename p5##_type, \
01891 typename p6##_type>\
01892 inline name##MatcherP7<p0##_type, p1##_type, p2##_type, p3##_type, \
01893 p4##_type, p5##_type, p6##_type> name(p0##_type p0, p1##_type p1, \
01894 p2##_type p2, p3##_type p3, p4##_type p4, p5##_type p5, \
01895 p6##_type p6) {\
01896 return name##MatcherP7<p0##_type, p1##_type, p2##_type, p3##_type, \
01897 p4##_type, p5##_type, p6##_type>(p0, p1, p2, p3, p4, p5, p6);\
01898 }\
01899 template <typename p0##_type, typename p1##_type, typename p2##_type, \
01900 typename p3##_type, typename p4##_type, typename p5##_type, \
01901 typename p6##_type>\
01902 template <typename arg_type>\
01903 bool name##MatcherP7<p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, \
01904 p5##_type, p6##_type>::gmock_Impl<arg_type>::MatchAndExplain(\
01905 arg_type arg, \
01906 ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\
01907 const
01908
01909 #define MATCHER_P8(name, p0, p1, p2, p3, p4, p5, p6, p7, description)\
01910 template <typename p0##_type, typename p1##_type, typename p2##_type, \
01911 typename p3##_type, typename p4##_type, typename p5##_type, \
01912 typename p6##_type, typename p7##_type>\
01913 class name##MatcherP8 {\
01914 public:\
01915 template <typename arg_type>\
01916 class gmock_Impl : public ::testing::MatcherInterface<arg_type> {\
01917 public:\
01918 gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \
01919 p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \
01920 p6##_type gmock_p6, p7##_type gmock_p7)\
01921 : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2), p3(gmock_p3), \
01922 p4(gmock_p4), p5(gmock_p5), p6(gmock_p6), p7(gmock_p7) {}\
01923 virtual bool MatchAndExplain(\
01924 arg_type arg, ::testing::MatchResultListener* result_listener) const;\
01925 virtual void DescribeTo(::std::ostream* gmock_os) const {\
01926 *gmock_os << FormatDescription(false);\
01927 }\
01928 virtual void DescribeNegationTo(::std::ostream* gmock_os) const {\
01929 *gmock_os << FormatDescription(true);\
01930 }\
01931 p0##_type p0;\
01932 p1##_type p1;\
01933 p2##_type p2;\
01934 p3##_type p3;\
01935 p4##_type p4;\
01936 p5##_type p5;\
01937 p6##_type p6;\
01938 p7##_type p7;\
01939 private:\
01940 ::testing::internal::string FormatDescription(bool negation) const {\
01941 const ::testing::internal::string gmock_description = (description);\
01942 if (!gmock_description.empty())\
01943 return gmock_description;\
01944 return ::testing::internal::FormatMatcherDescription(\
01945 negation, #name, \
01946 ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\
01947 ::std::tr1::tuple<p0##_type, p1##_type, p2##_type, p3##_type, \
01948 p4##_type, p5##_type, p6##_type, p7##_type>(p0, p1, p2, \
01949 p3, p4, p5, p6, p7)));\
01950 }\
01951 GTEST_DISALLOW_ASSIGN_(gmock_Impl);\
01952 };\
01953 template <typename arg_type>\
01954 operator ::testing::Matcher<arg_type>() const {\
01955 return ::testing::Matcher<arg_type>(\
01956 new gmock_Impl<arg_type>(p0, p1, p2, p3, p4, p5, p6, p7));\
01957 }\
01958 name##MatcherP8(p0##_type gmock_p0, p1##_type gmock_p1, \
01959 p2##_type gmock_p2, p3##_type gmock_p3, p4##_type gmock_p4, \
01960 p5##_type gmock_p5, p6##_type gmock_p6, \
01961 p7##_type gmock_p7) : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2), \
01962 p3(gmock_p3), p4(gmock_p4), p5(gmock_p5), p6(gmock_p6), \
01963 p7(gmock_p7) {\
01964 }\
01965 p0##_type p0;\
01966 p1##_type p1;\
01967 p2##_type p2;\
01968 p3##_type p3;\
01969 p4##_type p4;\
01970 p5##_type p5;\
01971 p6##_type p6;\
01972 p7##_type p7;\
01973 private:\
01974 GTEST_DISALLOW_ASSIGN_(name##MatcherP8);\
01975 };\
01976 template <typename p0##_type, typename p1##_type, typename p2##_type, \
01977 typename p3##_type, typename p4##_type, typename p5##_type, \
01978 typename p6##_type, typename p7##_type>\
01979 inline name##MatcherP8<p0##_type, p1##_type, p2##_type, p3##_type, \
01980 p4##_type, p5##_type, p6##_type, p7##_type> name(p0##_type p0, \
01981 p1##_type p1, p2##_type p2, p3##_type p3, p4##_type p4, p5##_type p5, \
01982 p6##_type p6, p7##_type p7) {\
01983 return name##MatcherP8<p0##_type, p1##_type, p2##_type, p3##_type, \
01984 p4##_type, p5##_type, p6##_type, p7##_type>(p0, p1, p2, p3, p4, p5, \
01985 p6, p7);\
01986 }\
01987 template <typename p0##_type, typename p1##_type, typename p2##_type, \
01988 typename p3##_type, typename p4##_type, typename p5##_type, \
01989 typename p6##_type, typename p7##_type>\
01990 template <typename arg_type>\
01991 bool name##MatcherP8<p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, \
01992 p5##_type, p6##_type, \
01993 p7##_type>::gmock_Impl<arg_type>::MatchAndExplain(\
01994 arg_type arg, \
01995 ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\
01996 const
01997
01998 #define MATCHER_P9(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, description)\
01999 template <typename p0##_type, typename p1##_type, typename p2##_type, \
02000 typename p3##_type, typename p4##_type, typename p5##_type, \
02001 typename p6##_type, typename p7##_type, typename p8##_type>\
02002 class name##MatcherP9 {\
02003 public:\
02004 template <typename arg_type>\
02005 class gmock_Impl : public ::testing::MatcherInterface<arg_type> {\
02006 public:\
02007 gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \
02008 p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \
02009 p6##_type gmock_p6, p7##_type gmock_p7, p8##_type gmock_p8)\
02010 : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2), p3(gmock_p3), \
02011 p4(gmock_p4), p5(gmock_p5), p6(gmock_p6), p7(gmock_p7), \
02012 p8(gmock_p8) {}\
02013 virtual bool MatchAndExplain(\
02014 arg_type arg, ::testing::MatchResultListener* result_listener) const;\
02015 virtual void DescribeTo(::std::ostream* gmock_os) const {\
02016 *gmock_os << FormatDescription(false);\
02017 }\
02018 virtual void DescribeNegationTo(::std::ostream* gmock_os) const {\
02019 *gmock_os << FormatDescription(true);\
02020 }\
02021 p0##_type p0;\
02022 p1##_type p1;\
02023 p2##_type p2;\
02024 p3##_type p3;\
02025 p4##_type p4;\
02026 p5##_type p5;\
02027 p6##_type p6;\
02028 p7##_type p7;\
02029 p8##_type p8;\
02030 private:\
02031 ::testing::internal::string FormatDescription(bool negation) const {\
02032 const ::testing::internal::string gmock_description = (description);\
02033 if (!gmock_description.empty())\
02034 return gmock_description;\
02035 return ::testing::internal::FormatMatcherDescription(\
02036 negation, #name, \
02037 ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\
02038 ::std::tr1::tuple<p0##_type, p1##_type, p2##_type, p3##_type, \
02039 p4##_type, p5##_type, p6##_type, p7##_type, \
02040 p8##_type>(p0, p1, p2, p3, p4, p5, p6, p7, p8)));\
02041 }\
02042 GTEST_DISALLOW_ASSIGN_(gmock_Impl);\
02043 };\
02044 template <typename arg_type>\
02045 operator ::testing::Matcher<arg_type>() const {\
02046 return ::testing::Matcher<arg_type>(\
02047 new gmock_Impl<arg_type>(p0, p1, p2, p3, p4, p5, p6, p7, p8));\
02048 }\
02049 name##MatcherP9(p0##_type gmock_p0, p1##_type gmock_p1, \
02050 p2##_type gmock_p2, p3##_type gmock_p3, p4##_type gmock_p4, \
02051 p5##_type gmock_p5, p6##_type gmock_p6, p7##_type gmock_p7, \
02052 p8##_type gmock_p8) : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2), \
02053 p3(gmock_p3), p4(gmock_p4), p5(gmock_p5), p6(gmock_p6), p7(gmock_p7), \
02054 p8(gmock_p8) {\
02055 }\
02056 p0##_type p0;\
02057 p1##_type p1;\
02058 p2##_type p2;\
02059 p3##_type p3;\
02060 p4##_type p4;\
02061 p5##_type p5;\
02062 p6##_type p6;\
02063 p7##_type p7;\
02064 p8##_type p8;\
02065 private:\
02066 GTEST_DISALLOW_ASSIGN_(name##MatcherP9);\
02067 };\
02068 template <typename p0##_type, typename p1##_type, typename p2##_type, \
02069 typename p3##_type, typename p4##_type, typename p5##_type, \
02070 typename p6##_type, typename p7##_type, typename p8##_type>\
02071 inline name##MatcherP9<p0##_type, p1##_type, p2##_type, p3##_type, \
02072 p4##_type, p5##_type, p6##_type, p7##_type, \
02073 p8##_type> name(p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, \
02074 p4##_type p4, p5##_type p5, p6##_type p6, p7##_type p7, \
02075 p8##_type p8) {\
02076 return name##MatcherP9<p0##_type, p1##_type, p2##_type, p3##_type, \
02077 p4##_type, p5##_type, p6##_type, p7##_type, p8##_type>(p0, p1, p2, \
02078 p3, p4, p5, p6, p7, p8);\
02079 }\
02080 template <typename p0##_type, typename p1##_type, typename p2##_type, \
02081 typename p3##_type, typename p4##_type, typename p5##_type, \
02082 typename p6##_type, typename p7##_type, typename p8##_type>\
02083 template <typename arg_type>\
02084 bool name##MatcherP9<p0##_type, p1##_type, p2##_type, p3##_type, p4##_type, \
02085 p5##_type, p6##_type, p7##_type, \
02086 p8##_type>::gmock_Impl<arg_type>::MatchAndExplain(\
02087 arg_type arg, \
02088 ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\
02089 const
02090
02091 #define MATCHER_P10(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, description)\
02092 template <typename p0##_type, typename p1##_type, typename p2##_type, \
02093 typename p3##_type, typename p4##_type, typename p5##_type, \
02094 typename p6##_type, typename p7##_type, typename p8##_type, \
02095 typename p9##_type>\
02096 class name##MatcherP10 {\
02097 public:\
02098 template <typename arg_type>\
02099 class gmock_Impl : public ::testing::MatcherInterface<arg_type> {\
02100 public:\
02101 gmock_Impl(p0##_type gmock_p0, p1##_type gmock_p1, p2##_type gmock_p2, \
02102 p3##_type gmock_p3, p4##_type gmock_p4, p5##_type gmock_p5, \
02103 p6##_type gmock_p6, p7##_type gmock_p7, p8##_type gmock_p8, \
02104 p9##_type gmock_p9)\
02105 : p0(gmock_p0), p1(gmock_p1), p2(gmock_p2), p3(gmock_p3), \
02106 p4(gmock_p4), p5(gmock_p5), p6(gmock_p6), p7(gmock_p7), \
02107 p8(gmock_p8), p9(gmock_p9) {}\
02108 virtual bool MatchAndExplain(\
02109 arg_type arg, ::testing::MatchResultListener* result_listener) const;\
02110 virtual void DescribeTo(::std::ostream* gmock_os) const {\
02111 *gmock_os << FormatDescription(false);\
02112 }\
02113 virtual void DescribeNegationTo(::std::ostream* gmock_os) const {\
02114 *gmock_os << FormatDescription(true);\
02115 }\
02116 p0##_type p0;\
02117 p1##_type p1;\
02118 p2##_type p2;\
02119 p3##_type p3;\
02120 p4##_type p4;\
02121 p5##_type p5;\
02122 p6##_type p6;\
02123 p7##_type p7;\
02124 p8##_type p8;\
02125 p9##_type p9;\
02126 private:\
02127 ::testing::internal::string FormatDescription(bool negation) const {\
02128 const ::testing::internal::string gmock_description = (description);\
02129 if (!gmock_description.empty())\
02130 return gmock_description;\
02131 return ::testing::internal::FormatMatcherDescription(\
02132 negation, #name, \
02133 ::testing::internal::UniversalTersePrintTupleFieldsToStrings(\
02134 ::std::tr1::tuple<p0##_type, p1##_type, p2##_type, p3##_type, \
02135 p4##_type, p5##_type, p6##_type, p7##_type, p8##_type, \
02136 p9##_type>(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9)));\
02137 }\
02138 GTEST_DISALLOW_ASSIGN_(gmock_Impl);\
02139 };\
02140 template <typename arg_type>\
02141 operator ::testing::Matcher<arg_type>() const {\
02142 return ::testing::Matcher<arg_type>(\
02143 new gmock_Impl<arg_type>(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9));\
02144 }\
02145 name##MatcherP10(p0##_type gmock_p0, p1##_type gmock_p1, \
02146 p2##_type gmock_p2, p3##_type gmock_p3, p4##_type gmock_p4, \
02147 p5##_type gmock_p5, p6##_type gmock_p6, p7##_type gmock_p7, \
02148 p8##_type gmock_p8, p9##_type gmock_p9) : p0(gmock_p0), p1(gmock_p1), \
02149 p2(gmock_p2), p3(gmock_p3), p4(gmock_p4), p5(gmock_p5), p6(gmock_p6), \
02150 p7(gmock_p7), p8(gmock_p8), p9(gmock_p9) {\
02151 }\
02152 p0##_type p0;\
02153 p1##_type p1;\
02154 p2##_type p2;\
02155 p3##_type p3;\
02156 p4##_type p4;\
02157 p5##_type p5;\
02158 p6##_type p6;\
02159 p7##_type p7;\
02160 p8##_type p8;\
02161 p9##_type p9;\
02162 private:\
02163 GTEST_DISALLOW_ASSIGN_(name##MatcherP10);\
02164 };\
02165 template <typename p0##_type, typename p1##_type, typename p2##_type, \
02166 typename p3##_type, typename p4##_type, typename p5##_type, \
02167 typename p6##_type, typename p7##_type, typename p8##_type, \
02168 typename p9##_type>\
02169 inline name##MatcherP10<p0##_type, p1##_type, p2##_type, p3##_type, \
02170 p4##_type, p5##_type, p6##_type, p7##_type, p8##_type, \
02171 p9##_type> name(p0##_type p0, p1##_type p1, p2##_type p2, p3##_type p3, \
02172 p4##_type p4, p5##_type p5, p6##_type p6, p7##_type p7, p8##_type p8, \
02173 p9##_type p9) {\
02174 return name##MatcherP10<p0##_type, p1##_type, p2##_type, p3##_type, \
02175 p4##_type, p5##_type, p6##_type, p7##_type, p8##_type, p9##_type>(p0, \
02176 p1, p2, p3, p4, p5, p6, p7, p8, p9);\
02177 }\
02178 template <typename p0##_type, typename p1##_type, typename p2##_type, \
02179 typename p3##_type, typename p4##_type, typename p5##_type, \
02180 typename p6##_type, typename p7##_type, typename p8##_type, \
02181 typename p9##_type>\
02182 template <typename arg_type>\
02183 bool name##MatcherP10<p0##_type, p1##_type, p2##_type, p3##_type, \
02184 p4##_type, p5##_type, p6##_type, p7##_type, p8##_type, \
02185 p9##_type>::gmock_Impl<arg_type>::MatchAndExplain(\
02186 arg_type arg, \
02187 ::testing::MatchResultListener* result_listener GTEST_ATTRIBUTE_UNUSED_)\
02188 const
02189
02190 #endif // GMOCK_INCLUDE_GMOCK_GMOCK_GENERATED_MATCHERS_H_