taken from upstream repo Index: include/gmock/gmock-generated-function-mockers.h.pump =================================================================== --- include/gmock/gmock-generated-function-mockers.h.pump (revision 227) +++ include/gmock/gmock-generated-function-mockers.h.pump (revision 228) @@ -45,10 +45,6 @@ $var n = 10 $$ The maximum arity we sup #include namespace testing { - -template -class MockSpec; - namespace internal { template @@ -89,7 +85,11 @@ $if i >= 1 [[ } R Invoke($Aas) { - return InvokeWith(ArgumentTuple($as)); + // Even though gcc and MSVC don't enforce it, 'this->' is required + // by the C++ standard [14.6.4] here, as the base class type is + // dependent on the template argument (and thus shouldn't be + // looked into when resolving InvokeWith). + return this->InvokeWith(ArgumentTuple($as)); } }; Index: include/gmock/gmock-generated-function-mockers.h =================================================================== --- include/gmock/gmock-generated-function-mockers.h (revision 227) +++ include/gmock/gmock-generated-function-mockers.h (revision 228) @@ -42,10 +42,6 @@ #include namespace testing { - -template -class MockSpec; - namespace internal { template @@ -71,7 +67,11 @@ class FunctionMocker : public } R Invoke() { - return InvokeWith(ArgumentTuple()); + // Even though gcc and MSVC don't enforce it, 'this->' is required + // by the C++ standard [14.6.4] here, as the base class type is + // dependent on the template argument (and thus shouldn't be + // looked into when resolving InvokeWith). + return this->InvokeWith(ArgumentTuple()); } }; @@ -88,7 +88,11 @@ class FunctionMocker : public } R Invoke(A1 a1) { - return InvokeWith(ArgumentTuple(a1)); + // Even though gcc and MSVC don't enforce it, 'this->' is required + // by the C++ standard [14.6.4] here, as the base class type is + // dependent on the template argument (and thus shouldn't be + // looked into when resolving InvokeWith). + return this->InvokeWith(ArgumentTuple(a1)); } }; @@ -105,7 +109,11 @@ class FunctionMocker : public } R Invoke(A1 a1, A2 a2) { - return InvokeWith(ArgumentTuple(a1, a2)); + // Even though gcc and MSVC don't enforce it, 'this->' is required + // by the C++ standard [14.6.4] here, as the base class type is + // dependent on the template argument (and thus shouldn't be + // looked into when resolving InvokeWith). + return this->InvokeWith(ArgumentTuple(a1, a2)); } }; @@ -123,7 +131,11 @@ class FunctionMocker : pu } R Invoke(A1 a1, A2 a2, A3 a3) { - return InvokeWith(ArgumentTuple(a1, a2, a3)); + // Even though gcc and MSVC don't enforce it, 'this->' is required + // by the C++ standard [14.6.4] here, as the base class type is + // dependent on the template argument (and thus shouldn't be + // looked into when resolving InvokeWith). + return this->InvokeWith(ArgumentTuple(a1, a2, a3)); } }; @@ -141,7 +153,11 @@ class FunctionMocker } R Invoke(A1 a1, A2 a2, A3 a3, A4 a4) { - return InvokeWith(ArgumentTuple(a1, a2, a3, a4)); + // Even though gcc and MSVC don't enforce it, 'this->' is required + // by the C++ standard [14.6.4] here, as the base class type is + // dependent on the template argument (and thus shouldn't be + // looked into when resolving InvokeWith). + return this->InvokeWith(ArgumentTuple(a1, a2, a3, a4)); } }; @@ -161,7 +177,11 @@ class FunctionMocker' is required + // by the C++ standard [14.6.4] here, as the base class type is + // dependent on the template argument (and thus shouldn't be + // looked into when resolving InvokeWith). + return this->InvokeWith(ArgumentTuple(a1, a2, a3, a4, a5)); } }; @@ -182,7 +202,11 @@ class FunctionMocker' is required + // by the C++ standard [14.6.4] here, as the base class type is + // dependent on the template argument (and thus shouldn't be + // looked into when resolving InvokeWith). + return this->InvokeWith(ArgumentTuple(a1, a2, a3, a4, a5, a6)); } }; @@ -203,7 +227,11 @@ class FunctionMocker' is required + // by the C++ standard [14.6.4] here, as the base class type is + // dependent on the template argument (and thus shouldn't be + // looked into when resolving InvokeWith). + return this->InvokeWith(ArgumentTuple(a1, a2, a3, a4, a5, a6, a7)); } }; @@ -224,7 +252,11 @@ class FunctionMocker' is required + // by the C++ standard [14.6.4] here, as the base class type is + // dependent on the template argument (and thus shouldn't be + // looked into when resolving InvokeWith). + return this->InvokeWith(ArgumentTuple(a1, a2, a3, a4, a5, a6, a7, a8)); } }; @@ -246,7 +278,11 @@ class FunctionMocker' is required + // by the C++ standard [14.6.4] here, as the base class type is + // dependent on the template argument (and thus shouldn't be + // looked into when resolving InvokeWith). + return this->InvokeWith(ArgumentTuple(a1, a2, a3, a4, a5, a6, a7, a8, a9)); } }; @@ -270,7 +306,12 @@ class FunctionMocker' is required + // by the C++ standard [14.6.4] here, as the base class type is + // dependent on the template argument (and thus shouldn't be + // looked into when resolving InvokeWith). + return this->InvokeWith(ArgumentTuple(a1, a2, a3, a4, a5, a6, a7, a8, a9, + a10)); } };