Fixes a slew of compiler warnings and turns on "warning as error" in the scons build.
diff --git a/include/gmock/gmock-more-actions.h b/include/gmock/gmock-more-actions.h
index c6fa6bb..6226392 100644
--- a/include/gmock/gmock-more-actions.h
+++ b/include/gmock/gmock-more-actions.h
@@ -58,8 +58,11 @@
   Result Perform(const ArgumentTuple& args) {
     return InvokeHelper<Result, ArgumentTuple>::Invoke(function_impl_, args);
   }
+
  private:
   FunctionImpl function_impl_;
+
+  GTEST_DISALLOW_ASSIGN_(InvokeAction);
 };
 
 // Implements the Invoke(object_ptr, &Class::Method) action.
@@ -74,9 +77,12 @@
     return InvokeHelper<Result, ArgumentTuple>::InvokeMethod(
         obj_ptr_, method_ptr_, args);
   }
+
  private:
   Class* const obj_ptr_;
   const MethodPtr method_ptr_;
+
+  GTEST_DISALLOW_ASSIGN_(InvokeMethodAction);
 };
 
 }  // namespace internal
@@ -122,6 +128,16 @@
   return internal::WithArgsAction<InnerAction, k>(action);
 }
 
+// The ACTION*() macros trigger warning C4100 (unreferenced formal
+// parameter) in MSVC with -W4.  Unfortunately they cannot be fixed in
+// the macro definition, as the warnings are generated when the macro
+// is expanded and macro expansion cannot contain #pragma.  Therefore
+// we suppress them here.
+#ifdef _MSC_VER
+#pragma warning(push)
+#pragma warning(disable:4100)
+#endif
+
 // Action ReturnArg<k>() returns the k-th argument of the mock function.
 ACTION_TEMPLATE(ReturnArg,
                 HAS_1_TEMPLATE_PARAMS(int, k),
@@ -185,6 +201,10 @@
 ACTION_P(Throw, exception) { throw exception; }
 #endif  // GTEST_HAS_EXCEPTIONS
 
+#ifdef _MSC_VER
+#pragma warning(pop)
+#endif
+
 }  // namespace testing
 
 #endif  // GMOCK_INCLUDE_GMOCK_GMOCK_MORE_ACTIONS_H_