diff --git a/CMakeLists.txt b/CMakeLists.txt
index ca62a9f..51284f1 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -208,12 +208,12 @@
 ENDIF (EXISTS ${LAPACK_LIB})
 
 SET(SUITESPARSE_FOUND
-  ${AMD_FOUND} AND
-  ${CAMD_FOUND} AND
-  ${COLAMD_FOUND} AND
-  ${CCOLAMD_FOUND} AND
-  ${CHOLMOD_FOUND} AND
-  ${BLAS_AND_LAPACK_FOUND})
+    ${AMD_FOUND} AND
+    ${CAMD_FOUND} AND
+    ${COLAMD_FOUND} AND
+    ${CCOLAMD_FOUND} AND
+    ${CHOLMOD_FOUND} AND
+    ${BLAS_AND_LAPACK_FOUND})
 
 # By default, if all of SuiteSparse's dependencies are found, Ceres is
 # built with SuiteSparse support. -DSUITESPARSE=ON/OFF can be used to
@@ -386,8 +386,15 @@
 
 # Use the std namespace for the hash<> and related templates. This may vary by
 # system.
-ADD_DEFINITIONS("\"-DCERES_HASH_NAMESPACE_START=namespace std { namespace tr1 {\"")
-ADD_DEFINITIONS("\"-DCERES_HASH_NAMESPACE_END=}}\"")
+IF (MSVC)
+  # This is known to work with Visual Studio 2010 Express.
+  ADD_DEFINITIONS("\"-DCERES_HASH_NAMESPACE_START=namespace std {\"")
+  ADD_DEFINITIONS("\"-DCERES_HASH_NAMESPACE_END=}\"")
+ELSE (MSVC)
+  # This is known to work with recent versions of Linux and Mac OS X.
+  ADD_DEFINITIONS("\"-DCERES_HASH_NAMESPACE_START=namespace std { namespace tr1 {\"")
+  ADD_DEFINITIONS("\"-DCERES_HASH_NAMESPACE_END=}}\"")
+ENDIF (MSVC)
 
 INCLUDE_DIRECTORIES(
   include
@@ -409,9 +416,6 @@
   INCLUDE_DIRECTORIES(${GFLAGS_INCLUDE})
 ENDIF (${GFLAGS})
 
-ADD_SUBDIRECTORY(internal/ceres)
-ADD_SUBDIRECTORY(examples)
-
 # Change the default build type from Debug to Release, while still
 # supporting overriding the build type.
 #
@@ -449,3 +453,36 @@
   SET (CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${CERES_CXX_FLAGS}"
        CACHE STRING "Release mode flags to the C++ Compiler" FORCE)
 ENDIF (CMAKE_BUILD_TYPE STREQUAL "Release")
+
+# After the tweaks for the compile settings, disable some warnings on MSVC.
+IF (MSVC)
+  # Disable signed/unsigned int conversion warnings.
+  ADD_DEFINITIONS( "/wd4018")
+  # Disable warning about using struct/class for the same symobl.
+  ADD_DEFINITIONS( "/wd4099")
+  # Disable warning about the insecurity of using "std::copy".
+  ADD_DEFINITIONS("/wd4996")
+  # Disable performance warning about int-to-bool conversion.
+  ADD_DEFINITIONS("/wd4800")
+  # Disable performance warning about fopen insecurity.
+  ADD_DEFINITIONS("/wd4996")
+  # Disable warning about int64 to int32 conversion. Disabling
+  # this warning may not be correct; needs investigation.
+  # TODO(keir): Investigate these warnings in more detail.
+  ADD_DEFINITIONS("/wd4244")
+  # It's not possible to use STL types in DLL interfaces in a portable and
+  # reliable way. However, that's what happens with Google Log and Google Flags
+  # on Windows. MSVC gets upset about this and throws warnings that we can't do
+  # much about. The real solution is to link static versions of Google Log and
+  # Google Test, but that seems tricky on Windows. So, disable the warning.
+  ADD_DEFINITIONS("/wd4251")
+
+  # Google Flags doesn't have their DLL import/export stuff set up correctly,
+  # which results in linker warnings. This is irrelevant for Ceres, so ignore
+  # the warnings.
+  SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /ignore:4049")
+ENDIF (MSVC)
+
+ADD_SUBDIRECTORY(internal/ceres)
+ADD_SUBDIRECTORY(examples)
+
diff --git a/examples/powell.cc b/examples/powell.cc
index 1c7cc68..6cd3611 100644
--- a/examples/powell.cc
+++ b/examples/powell.cc
@@ -45,8 +45,9 @@
 // Vol 7(1), March 1981.
 
 #include <vector>
-
 #include "ceres/ceres.h"
+#include "gflags/gflags.h"
+#include "glog/logging.h"
 
 using ceres::AutoDiffCostFunction;
 using ceres::CostFunction;
diff --git a/examples/quadratic.cc b/examples/quadratic.cc
index 81ba4f9..8527af3 100644
--- a/examples/quadratic.cc
+++ b/examples/quadratic.cc
@@ -33,8 +33,9 @@
 // Minimize 0.5 (10 - x)^2 using analytic jacobian matrix.
 
 #include <vector>
-
 #include "ceres/ceres.h"
+#include "gflags/gflags.h"
+#include "glog/logging.h"
 
 using ceres::SizedCostFunction;
 using ceres::Problem;
diff --git a/examples/quadratic_auto_diff.cc b/examples/quadratic_auto_diff.cc
index 71b216b..ea7fae9 100644
--- a/examples/quadratic_auto_diff.cc
+++ b/examples/quadratic_auto_diff.cc
@@ -34,8 +34,9 @@
 // automatic differentiation.
 
 #include <vector>
-
 #include "ceres/ceres.h"
+#include "gflags/gflags.h"
+#include "glog/logging.h"
 
 using ceres::AutoDiffCostFunction;
 using ceres::CostFunction;
diff --git a/examples/quadratic_numeric_diff.cc b/examples/quadratic_numeric_diff.cc
index 933dbc7..8ec88ef 100644
--- a/examples/quadratic_numeric_diff.cc
+++ b/examples/quadratic_numeric_diff.cc
@@ -32,8 +32,9 @@
 // numeric differentiation.
 
 #include <vector>
-
 #include "ceres/ceres.h"
+#include "gflags/gflags.h"
+#include "glog/logging.h"
 
 using ceres::NumericDiffCostFunction;
 using ceres::CENTRAL;
diff --git a/include/ceres/fpclassify.h b/include/ceres/fpclassify.h
index 59424bf..550d4d4 100644
--- a/include/ceres/fpclassify.h
+++ b/include/ceres/fpclassify.h
@@ -37,12 +37,28 @@
 #ifndef CERES_PUBLIC_FPCLASSIFY_H_
 #define CERES_PUBLIC_FPCLASSIFY_H_
 
+#if defined(_MSC_VER)
+#include <float.h>
+#endif
+
 namespace ceres {
 
+#if defined(_MSC_VER)
+inline bool IsFinite  (double x) { return _finite(x);                }
+inline bool IsInfinite(double x) { return !_finite(x) && !_isnan(x); }
+inline bool IsNaN     (double x) { return _isnan(x);                 }
+inline bool IsNormal  (double x) {
+  int classification = _fpclass(x);
+  return classification == _FPCLASS_NN ||
+         classification == _FPCLASS_PN;
+}
+#else
+// TODO(keir): Test the "else" with more platforms.
 inline bool IsFinite  (double x) { return std::isfinite(x); }
 inline bool IsInfinite(double x) { return std::isinf(x);    }
 inline bool IsNaN     (double x) { return std::isnan(x);    }
 inline bool IsNormal  (double x) { return std::isnormal(x); }
+#endif
 
 }  // namespace ceres
 
diff --git a/include/ceres/internal/fixed_array.h b/include/ceres/internal/fixed_array.h
index aa1722c..e11b71b 100644
--- a/include/ceres/internal/fixed_array.h
+++ b/include/ceres/internal/fixed_array.h
@@ -69,6 +69,12 @@
 // Non-POD types will be default-initialized just like regular vectors or
 // arrays.
 
+#if defined(_WIN64)
+   typedef __int64      ssize_t;
+#elif defined(_WIN32)
+   typedef __int32      ssize_t;
+#endif
+
 template <typename T, ssize_t inline_elements = -1>
 class FixedArray {
  public:
@@ -152,13 +158,13 @@
 
   // Allocate some space, not an array of elements of type T, so that we can
   // skip calling the T constructors and destructors for space we never use.
-  ManualConstructor<InnerContainer> inline_space_[kInlineElements] CERES_ALIGN_ATTRIBUTE(16);
+  ManualConstructor<InnerContainer> CERES_ALIGN_ATTRIBUTE(16) inline_space_[kInlineElements];
 };
 
 // Implementation details follow
 
 template <class T, ssize_t S>
-inline FixedArray<T, S>::FixedArray(FixedArray<T, S>::size_type n)
+inline FixedArray<T, S>::FixedArray(typename FixedArray<T, S>::size_type n)
     : size_(n),
       array_((n <= kInlineElements
               ? reinterpret_cast<InnerContainer*>(inline_space_)
diff --git a/include/ceres/internal/macros.h b/include/ceres/internal/macros.h
index 0e84e9c..83ec311 100644
--- a/include/ceres/internal/macros.h
+++ b/include/ceres/internal/macros.h
@@ -83,7 +83,7 @@
 // That gcc wants both of these prototypes seems mysterious. VC, for
 // its part, can't decide which to use (another mystery). Matching of
 // template overloads: the final frontier.
-#ifndef COMPILER_MSVC
+#ifndef _WIN32
 template <typename T, size_t N>
 char (&ArraySizeHelper(const T (&array)[N]))[N];
 #endif
@@ -131,12 +131,13 @@
 //
 // - wan 2005-11-16
 //
-// Starting with Visual C++ 2005, WinNT.h includes ARRAYSIZE.
-#if !defined(COMPILER_MSVC) || (defined(_MSC_VER) && _MSC_VER < 1400)
-#define ARRAYSIZE(a) \
+// Starting with Visual C++ 2005, WinNT.h includes ARRAYSIZE. However,
+// the definition comes from the over-broad windows.h header that 
+// introduces a macro, ERROR, that conflicts with the logging framework
+// that Ceres uses. Instead, rename ARRAYSIZE to CERES_ARRAYSIZE.
+#define CERES_ARRAYSIZE(a) \
   ((sizeof(a) / sizeof(*(a))) / \
    static_cast<size_t>(!(sizeof(a) % sizeof(*(a)))))
-#endif
 
 // Tell the compiler to warn about unused return values for functions declared
 // with this macro.  The macro should be used on function declarations
diff --git a/include/ceres/jet.h b/include/ceres/jet.h
index 552df65..e94df5d 100644
--- a/include/ceres/jet.h
+++ b/include/ceres/jet.h
@@ -650,6 +650,10 @@
   typedef ceres::Jet<T, N> NonInteger;
   typedef ceres::Jet<T, N> Nested;
 
+  static typename ceres::Jet<T, N> dummy_precision() {
+    return ceres::Jet<T, N>(1e-12);
+  }
+
   enum {
     IsComplex = 0,
     IsInteger = 0,
diff --git a/include/ceres/rotation.h b/include/ceres/rotation.h
index 834ca45..6c0d58e 100644
--- a/include/ceres/rotation.h
+++ b/include/ceres/rotation.h
@@ -327,7 +327,8 @@
 inline void EulerAnglesToRotationMatrix(const T* euler,
                                         const int row_stride,
                                         T* R) {
-  const T degrees_to_radians(M_PI / 180.0);
+  const double kPi = 3.14159265358979323846;
+  const T degrees_to_radians(kPi / 180.0);
 
   const T pitch(euler[0] * degrees_to_radians);
   const T roll(euler[1] * degrees_to_radians);
@@ -509,4 +510,5 @@
 }
 
 }  // namespace ceres
+
 #endif  // CERES_PUBLIC_ROTATION_H_
diff --git a/internal/ceres/CMakeLists.txt b/internal/ceres/CMakeLists.txt
index a981d59..0ca92fd 100644
--- a/internal/ceres/CMakeLists.txt
+++ b/internal/ceres/CMakeLists.txt
@@ -98,7 +98,7 @@
 IF (${SCHUR_SPECIALIZATIONS})
   FILE(GLOB CERES_INTERNAL_SCHUR_FILES generated/*.cc)
 ELSE (${SCHUR_SPECIALIZATIONS})
-  # Only the fully dynamic solver.
+  # Only the fully dynamic solver. The build is much faster this way.
   FILE(GLOB CERES_INTERNAL_SCHUR_FILES generated/schur_eliminator_d_d_d.cc)
 ENDIF (${SCHUR_SPECIALIZATIONS})
 
diff --git a/internal/ceres/autodiff_cost_function_test.cc b/internal/ceres/autodiff_cost_function_test.cc
index 2f44595..33e576f 100644
--- a/internal/ceres/autodiff_cost_function_test.cc
+++ b/internal/ceres/autodiff_cost_function_test.cc
@@ -44,15 +44,13 @@
   template <typename T>
   bool operator()(const T* const x, const T* const y,
                   T* cost) const {
-    cost[0] =
-      x[0] * y[0] + x[1] * y[1]  - T(a_);
+    cost[0] = x[0] * y[0] + x[1] * y[1]  - T(a_);
     return true;
   }
  private:
   double a_;
 };
 
-
 TEST(AutoDiffResidualAndJacobian, BilinearDifferentiationTest) {
   CostFunction* cost_function  =
     new AutoDiffCostFunction<BinaryScalarCost, 1, 2, 2>(
@@ -72,7 +70,6 @@
   jacobians[0] = new double[2];
   jacobians[1] = new double[2];
 
-
   double residuals = 0.0;
 
   cost_function->Evaluate(parameters, &residuals, NULL);
diff --git a/internal/ceres/block_random_access_sparse_matrix_test.cc b/internal/ceres/block_random_access_sparse_matrix_test.cc
index e4e6769..1e1f831 100644
--- a/internal/ceres/block_random_access_sparse_matrix_test.cc
+++ b/internal/ceres/block_random_access_sparse_matrix_test.cc
@@ -115,7 +115,8 @@
               kTolerance);
 
   // There is nothing else in the matrix besides these four blocks.
-  EXPECT_NEAR(dense.norm(), sqrt(9 + 16 * 16 + 36 * 20 + 9 * 15), kTolerance);
+  EXPECT_NEAR(dense.norm(), sqrt(9. + 16. * 16. + 36. * 20. + 9. * 15.),
+              kTolerance);
 }
 
 // IntPairToLong is private, thus this fixture is needed to access and
diff --git a/internal/ceres/collections_port.h b/internal/ceres/collections_port.h
index 7255285..e125f3f 100644
--- a/internal/ceres/collections_port.h
+++ b/internal/ceres/collections_port.h
@@ -33,8 +33,13 @@
 #ifndef CERES_INTERNAL_COLLECTIONS_PORT_H_
 #define CERES_INTERNAL_COLLECTIONS_PORT_H_
 
+#if defined(_MSC_VER) && _MSC_VER <= 1600
+#include <unordered_map>
+#include <unordered_set>
+#else
 #include <tr1/unordered_map>
 #include <tr1/unordered_set>
+#endif
 #include <utility>
 #include "ceres/integral_types.h"
 #include "ceres/internal/port.h"
diff --git a/internal/ceres/corrector_test.cc b/internal/ceres/corrector_test.cc
index b2556af..b2ee9ab 100644
--- a/internal/ceres/corrector_test.cc
+++ b/internal/ceres/corrector_test.cc
@@ -44,15 +44,19 @@
 // If rho[1] is zero, the Corrector constructor should crash.
 TEST(Corrector, ZeroGradientDeathTest) {
   const double kRho[] = {0.0, 0.0, 0.0};
+#ifndef _WIN32
   ASSERT_DEATH({Corrector c(1.0, kRho);},
                ".*");
+#endif  // _WIN32
 }
 
 // If rho[1] is negative, the Corrector constructor should crash.
 TEST(Corrector, NegativeGradientDeathTest) {
   const double kRho[] = {0.0, -0.1, 0.0};
+#ifndef _WIN32
   ASSERT_DEATH({Corrector c(1.0, kRho);},
                ".*");
+#endif  // _WIN32
 }
 
 TEST(Corrector, ScalarCorrection) {
diff --git a/internal/ceres/graph_test.cc b/internal/ceres/graph_test.cc
index ce82dea..d4ee22d 100644
--- a/internal/ceres/graph_test.cc
+++ b/internal/ceres/graph_test.cc
@@ -83,6 +83,10 @@
   EXPECT_EQ(graph.EdgeWeight(1, 0), 0.5);
 }
 
+// Death tests don't work on Windows.
+// TODO(keir): Figure out why this test doesn't work on Windows.
+#ifndef _WIN32
+
 TEST(Graph, DieOnNonExistentVertex) {
   Graph<int> graph;
   graph.AddVertex(0, 1.0);
@@ -93,6 +97,8 @@
   EXPECT_DEATH(graph.Neighbors(2), "key not found");
 }
 
+#endif  // _WIN32
+
 TEST(Graph, NonExistentEdge) {
   Graph<int> graph;
   graph.AddVertex(0, 1.0);
diff --git a/internal/ceres/iterative_schur_complement_solver.cc b/internal/ceres/iterative_schur_complement_solver.cc
index 3d837b3..ec4293b 100644
--- a/internal/ceres/iterative_schur_complement_solver.cc
+++ b/internal/ceres/iterative_schur_complement_solver.cc
@@ -40,6 +40,9 @@
 #include "ceres/block_structure.h"
 #include "ceres/conjugate_gradients_solver.h"
 #include "ceres/implicit_schur_complement.h"
+#include "ceres/linear_solver.h"
+#include "ceres/triplet_sparse_matrix.h"
+#include "ceres/visibility_based_preconditioner.h"
 #include "ceres/internal/eigen.h"
 #include "ceres/internal/scoped_ptr.h"
 #include "ceres/linear_solver.h"
diff --git a/internal/ceres/jet_test.cc b/internal/ceres/jet_test.cc
index f12b8b9..0dd4336 100644
--- a/internal/ceres/jet_test.cc
+++ b/internal/ceres/jet_test.cc
@@ -33,7 +33,7 @@
 #include <algorithm>
 #include <cmath>
 
-#include <glog/logging.h>
+#include "glog/logging.h"
 #include "gtest/gtest.h"
 #include "ceres/fpclassify.h"
 #include "ceres/stringprintf.h"
@@ -44,6 +44,8 @@
 namespace ceres {
 namespace internal {
 
+const double kE = 2.71828182845904523536;
+
 typedef Jet<double, 2> J;
 
 // Convenient shorthand for making a jet.
@@ -166,7 +168,7 @@
     VL << "x = " << x;
     VL << "y = " << y;
 
-    J u = pow(M_E, logx);
+    J u = pow(kE, logx);
     VL << "u = " << u;
 
     ExpectJetsClose(x, u);
@@ -174,7 +176,7 @@
 
   { // Check that pow(e, log(x)) == x.
     J logx = log(x);
-    J e = MakeJet(M_E, 0., 0.);
+    J e = MakeJet(kE, 0., 0.);
     VL << "x = " << x;
     VL << "log(x) = " << logx;
 
@@ -186,7 +188,7 @@
 
   { // Check that pow(e, log(x)) == x.
     J logx = log(x);
-    J e = MakeJet(M_E, 0., 0.);
+    J e = MakeJet(kE, 0., 0.);
     VL << "x = " << x;
     VL << "logx = " << logx;
 
@@ -198,7 +200,7 @@
 
   { // Check that pow(x,y) = exp(y*log(x)).
     J logx = log(x);
-    J e = MakeJet(M_E, 0., 0.);
+    J e = MakeJet(kE, 0., 0.);
     VL << "x = " << x;
     VL << "logx = " << logx;
 
diff --git a/internal/ceres/linear_least_squares_problems.cc b/internal/ceres/linear_least_squares_problems.cc
index fccc3b1..ef72cbd 100644
--- a/internal/ceres/linear_least_squares_problems.cc
+++ b/internal/ceres/linear_least_squares_problems.cc
@@ -61,6 +61,7 @@
     default:
       LOG(FATAL) << "Unknown problem id requested " << id;
   }
+  return NULL;
 }
 
 #ifndef CERES_DONT_HAVE_PROTOCOL_BUFFERS
diff --git a/internal/ceres/linear_solver.cc b/internal/ceres/linear_solver.cc
index c08d1f2..4bfb599 100644
--- a/internal/ceres/linear_solver.cc
+++ b/internal/ceres/linear_solver.cc
@@ -81,6 +81,7 @@
     default:
       LOG(FATAL) << "Unknown linear solver type :"
                  << options.type;
+	  return NULL;  // MSVC doesn't understand that LOG(FATAL) never returns.
   }
 }
 
diff --git a/internal/ceres/local_parameterization_test.cc b/internal/ceres/local_parameterization_test.cc
index aa49250..df59ed3 100644
--- a/internal/ceres/local_parameterization_test.cc
+++ b/internal/ceres/local_parameterization_test.cc
@@ -62,6 +62,10 @@
   }
 }
 
+// Death tests are not working on Windows yet.
+// TODO(keir): Figure out how to enable these.
+#ifndef _WIN32
+
 TEST(SubsetParameterization, DeathTests) {
   vector<int> constant_parameters;
   EXPECT_DEATH(SubsetParameterization parameterization(1, constant_parameters),
@@ -80,6 +84,8 @@
                "duplicates");
 }
 
+#endif  // _WIN32
+
 TEST(SubsetParameterization, NormalFunctionTest) {
   double x[4] = {1.0, 2.0, 3.0, 4.0};
   for (int i = 0; i < 4; ++i) {
diff --git a/internal/ceres/numeric_diff_cost_function_test.cc b/internal/ceres/numeric_diff_cost_function_test.cc
index a39e160..d86bb58 100644
--- a/internal/ceres/numeric_diff_cost_function_test.cc
+++ b/internal/ceres/numeric_diff_cost_function_test.cc
@@ -197,7 +197,7 @@
         { 0.0, 0.0, 0.0, 0.0, 0.0 },
       },
     };
-    for (int k = 0; k < ARRAYSIZE(kTests); ++k) {
+    for (int k = 0; k < CERES_ARRAYSIZE(kTests); ++k) {
       double *x1 = &(kTests[k].x1[0]);
       double *x2 = &(kTests[k].x2[0]);
       double *parameters[] = { x1, x2 };
diff --git a/internal/ceres/parameter_block_test.cc b/internal/ceres/parameter_block_test.cc
index 98ec4d0..b1d69b0 100644
--- a/internal/ceres/parameter_block_test.cc
+++ b/internal/ceres/parameter_block_test.cc
@@ -36,6 +36,8 @@
 namespace ceres {
 namespace internal {
 
+// TODO(keir): Figure out how to enable the death tests on Windows.
+
 TEST(ParameterBlock, SetLocalParameterization) {
   double x[3] = { 1.0, 2.0, 3.0 };
   ParameterBlock parameter_block(x, 3);
@@ -46,11 +48,13 @@
 
   // Can't set the parameterization if the sizes don't match.
   SubsetParameterization subset_wrong_size(4, indices);
+#ifndef _WIN32
   ASSERT_DEATH(parameter_block.SetParameterization(&subset_wrong_size),
                "global");
 
   // Can't set parameterization to NULL from NULL.
   ASSERT_DEATH(parameter_block.SetParameterization(NULL), "NULL");
+#endif  // _WIN32
 
   // Now set the parameterization.
   SubsetParameterization subset(3, indices);
@@ -59,6 +63,7 @@
   // Re-setting the parameterization to the same value is supported.
   parameter_block.SetParameterization(&subset);
 
+#ifndef _WIN32
   // Can't set parameterization to NULL from another parameterization.
   ASSERT_DEATH(parameter_block.SetParameterization(NULL), "NULL");
 
@@ -66,6 +71,7 @@
   SubsetParameterization subset_different(3, indices);
   ASSERT_DEATH(parameter_block.SetParameterization(&subset_different),
                "re-set");
+#endif  // _WIN32
 
   // Ensure the local parameterization jacobian result is correctly computed.
   ConstMatrixRef local_parameterization_jacobian(
diff --git a/internal/ceres/problem_test.cc b/internal/ceres/problem_test.cc
index 28331f2..b8dbc74 100644
--- a/internal/ceres/problem_test.cc
+++ b/internal/ceres/problem_test.cc
@@ -106,6 +106,9 @@
   }
 };
 
+// TODO(keir): Figure out how to enable death tests on Windows.
+#ifndef _WIN32
+
 TEST(Problem, AddResidualWithNullCostFunctionDies) {
   double x[3], y[4], z[5];
 
@@ -169,6 +172,8 @@
                "different block sizes");
 }
 
+#endif  // _WIN32
+
 TEST(Problem, AddResidualAddsDuplicatedParametersOnlyOnce) {
   double x[3], y[4], z[5];
 
@@ -182,6 +187,8 @@
   EXPECT_EQ(12, problem.NumParameters());
 }
 
+#ifndef _WIN32
+
 TEST(Problem, AddParameterWithDifferentSizesOnTheSameVariableDies) {
   double x[3], y[4];
 
@@ -226,6 +233,8 @@
   ASSERT_EQ(5, problem.NumParameterBlocks());
 }
 
+#endif  // _WIN32
+
 TEST(Problem, AddParameterIgnoresDuplicateCalls) {
   double x[3], y[4];
 
diff --git a/internal/ceres/rotation_test.cc b/internal/ceres/rotation_test.cc
index 55a4fbb..3dc8231 100644
--- a/internal/ceres/rotation_test.cc
+++ b/internal/ceres/rotation_test.cc
@@ -45,6 +45,9 @@
 namespace ceres {
 namespace internal {
 
+const double kPi = 3.14159265358979323846;
+const double kHalfSqrt2 = 0.707106781186547524401;
+
 double RandDouble() {
   double r = rand();
   return r / RAND_MAX;
@@ -54,7 +57,7 @@
 static double const kTolerance = numeric_limits<double>::epsilon() * 10;
 
 // Looser tolerance used for for numerically unstable conversions.
-static double const kLooseTolerance = 1e-9;;
+static double const kLooseTolerance = 1e-9;
 
 // Use as:
 // double quaternion[4];
@@ -199,9 +202,9 @@
 
 // Transforms a rotation by pi/2 around X to a quaternion.
 TEST(Rotation, XRotationToQuaternion) {
-  double axis_angle[3] = { M_PI / 2, 0, 0 };
+  double axis_angle[3] = { kPi / 2, 0, 0 };
   double quaternion[4];
-  double expected[4] = { M_SQRT1_2, M_SQRT1_2, 0, 0 };
+  double expected[4] = { kHalfSqrt2, kHalfSqrt2, 0, 0 };
   AngleAxisToQuaternion(axis_angle, quaternion);
   EXPECT_THAT(quaternion, IsNormalizedQuaternion());
   EXPECT_THAT(quaternion, IsNearQuaternion(expected));
@@ -220,7 +223,7 @@
 TEST(Rotation, YRotationQuaternionToAngleAxis) {
   double quaternion[4] = { 0, 0, 1, 0 };
   double axis_angle[3];
-  double expected[3] = { 0, M_PI, 0 };
+  double expected[3] = { 0, kPi, 0 };
   QuaternionToAngleAxis(quaternion, axis_angle);
   EXPECT_THAT(axis_angle, IsNearAngleAxis(expected));
 }
@@ -230,7 +233,7 @@
 TEST(Rotation, ZRotationQuaternionToAngleAxis) {
   double quaternion[4] = { sqrt(3) / 2, 0, 0, 0.5 };
   double axis_angle[3];
-  double expected[3] = { 0, 0, M_PI / 3 };
+  double expected[3] = { 0, 0, kPi / 3 };
   QuaternionToAngleAxis(quaternion, axis_angle);
   EXPECT_THAT(axis_angle, IsNearAngleAxis(expected));
 }
@@ -275,7 +278,7 @@
     norm = sqrt(norm);
 
     // Angle in [-pi, pi).
-    double theta = M_PI * 2 * RandDouble() - M_PI;
+    double theta = kPi * 2 * RandDouble() - kPi;
     for (int i = 0; i < 3; i++) {
       axis_angle[i] = axis_angle[i] * theta / norm;
     }
@@ -340,7 +343,7 @@
 
 // Transforms a rotation by pi/2 around X to a rotation matrix and back.
 TEST(Rotation, XRotationToRotationMatrix) {
-  double axis_angle[3] = { M_PI / 2, 0, 0 };
+  double axis_angle[3] = { kPi / 2, 0, 0 };
   double matrix[9];
   // The rotation matrices are stored column-major.
   double expected[9] = { 1, 0, 0, 0, 0, 1, 0, -1, 0 };
@@ -355,7 +358,7 @@
 // Transforms an axis angle that rotates by pi about the Y axis to a
 // rotation matrix and back.
 TEST(Rotation, YRotationToRotationMatrix) {
-  double axis_angle[3] = { 0, M_PI, 0 };
+  double axis_angle[3] = { 0, kPi, 0 };
   double matrix[9];
   double expected[9] = { -1, 0, 0, 0, 1, 0, 0, 0, -1 };
   AngleAxisToRotationMatrix(axis_angle, matrix);
@@ -385,7 +388,7 @@
 
     // Angle in [pi - kMaxSmallAngle, pi).
     const double kMaxSmallAngle = 1e-2;
-    double theta = M_PI - kMaxSmallAngle * RandDouble();
+    double theta = kPi - kMaxSmallAngle * RandDouble();
 
     for (int i = 0; i < 3; i++) {
       in_axis_angle[i] *= (theta / norm);
@@ -400,7 +403,7 @@
 }
 
 TEST(Rotation, AtPiAngleAxisRoundTrip) {
-  // A rotation of M_PI about the X axis;
+  // A rotation of kPi about the X axis;
   static const double kMatrix[3][3] = {
     {1.0,  0.0,  0.0},
     {0.0,  -1.0,  0.0},
@@ -415,7 +418,7 @@
      }
   }
 
-  const double expected_axis_angle[3] = { M_PI, 0, 0 };
+  const double expected_axis_angle[3] = { kPi, 0, 0 };
 
   double out_matrix[9];
   double axis_angle[3];
@@ -424,7 +427,7 @@
 
   LOG(INFO) << "AngleAxis = " << axis_angle[0] << " " << axis_angle[1]
             << " " << axis_angle[2];
-  LOG(INFO) << "Expected AngleAxis = " << M_PI << " 0 0";
+  LOG(INFO) << "Expected AngleAxis = " << kPi << " 0 0";
   double out_rowmajor[3][3];
   for (int j = 0, k = 0; j < 3; ++j) {
     for (int i = 0; i < 3; ++i, ++k) {
@@ -452,7 +455,7 @@
 // Transforms an axis angle that rotates by pi/3 about the Z axis to a
 // rotation matrix.
 TEST(Rotation, ZRotationToRotationMatrix) {
-  double axis_angle[3] =  { 0, 0, M_PI / 3 };
+  double axis_angle[3] =  { 0, 0, kPi / 3 };
   double matrix[9];
   // This is laid-out row-major on the screen but is actually stored
   // column-major.
@@ -483,7 +486,7 @@
     norm = sqrt(norm);
 
     // Angle in [-pi, pi).
-    double theta = M_PI * 2 * RandDouble() - M_PI;
+    double theta = kPi * 2 * RandDouble() - kPi;
     for (int i = 0; i < 3; i++) {
       axis_angle[i] = axis_angle[i] * theta / norm;
     }
@@ -510,7 +513,7 @@
 // Convert Euler angles from radians to degrees.
 static void ToDegrees(double ea[3]) {
   for (int i = 0; i < 3; ++i)
-    ea[i] *= 180.0 / M_PI;
+    ea[i] *= 180.0 / kPi;
 }
 
 // Compare the 3x3 rotation matrices produced by the axis-angle
@@ -843,7 +846,7 @@
   double rotation_matrix_rotated_p[3];
 
   for (int i = 0; i < 10000; ++i) {
-    double theta = (2.0 * i * 0.0011 - 1.0) * M_PI;
+    double theta = (2.0 * i * 0.0011 - 1.0) * kPi;
     for (int j = 0; j < 50; ++j) {
       double norm2 = 0.0;
       for (int k = 0; k < 3; ++k) {
diff --git a/internal/ceres/runtime_numeric_diff_cost_function_test.cc b/internal/ceres/runtime_numeric_diff_cost_function_test.cc
index 6926d28..bc195b8 100644
--- a/internal/ceres/runtime_numeric_diff_cost_function_test.cc
+++ b/internal/ceres/runtime_numeric_diff_cost_function_test.cc
@@ -186,7 +186,7 @@
         { 0.0, 0.0, 0.0, 0.0, 0.0 },
       },
     };
-    for (int k = 0; k < ARRAYSIZE(kTests); ++k) {
+    for (int k = 0; k < CERES_ARRAYSIZE(kTests); ++k) {
       double *x1 = &(kTests[k].x1[0]);
       double *x2 = &(kTests[k].x2[0]);
       double *parameters[] = { x1, x2 };
diff --git a/internal/ceres/schur_eliminator_test.cc b/internal/ceres/schur_eliminator_test.cc
index 0ac4354..5146d47 100644
--- a/internal/ceres/schur_eliminator_test.cc
+++ b/internal/ceres/schur_eliminator_test.cc
@@ -32,6 +32,7 @@
 
 #include <glog/logging.h>
 #include "ceres/file.h"
+#include "gflags/gflags.h"
 #include "gtest/gtest.h"
 #include "Eigen/Dense"
 #include "ceres/block_random_access_dense_matrix.h"
diff --git a/internal/ceres/solver_impl_test.cc b/internal/ceres/solver_impl_test.cc
index c30abbc..4713143 100644
--- a/internal/ceres/solver_impl_test.cc
+++ b/internal/ceres/solver_impl_test.cc
@@ -233,10 +233,12 @@
   options.linear_solver_type = DENSE_SCHUR;
   options.num_eliminate_blocks = 0;
   string error;
+#ifndef _WIN32
   EXPECT_DEATH(
       SolverImpl::MaybeReorderResidualBlocks(
           options, problem.mutable_program(), &error),
       "Congratulations");
+#endif  // _WIN32
 }
 
 TEST(SolverImpl, ReorderResidualBlockNormalFunction) {
diff --git a/internal/ceres/sparse_normal_cholesky_solver.cc b/internal/ceres/sparse_normal_cholesky_solver.cc
index 448bbd5..a7c43ef 100644
--- a/internal/ceres/sparse_normal_cholesky_solver.cc
+++ b/internal/ceres/sparse_normal_cholesky_solver.cc
@@ -150,6 +150,9 @@
     const LinearSolver::PerSolveOptions& per_solve_options,
     double * x) {
   LOG(FATAL) << "No CXSparse support in Ceres.";
+
+  // Unreachable but MSVC does not know this.
+  return LinearSolver::Summary();
 }
 #endif
 
@@ -233,6 +236,9 @@
     const LinearSolver::PerSolveOptions& per_solve_options,
     double * x) {
   LOG(FATAL) << "No SuiteSparse support in Ceres.";
+
+  // Unreachable but MSVC does not know this.
+  return LinearSolver::Summary();
 }
 #endif
 
diff --git a/internal/ceres/stringprintf.cc b/internal/ceres/stringprintf.cc
index d1e016a..c0f3522 100644
--- a/internal/ceres/stringprintf.cc
+++ b/internal/ceres/stringprintf.cc
@@ -39,8 +39,9 @@
 namespace ceres {
 namespace internal {
 
-#ifdef COMPILER_MSVC
+#ifdef _MSC_VER
 enum { IS_COMPILER_MSVC = 1 };
+#define va_copy(d,s) ((d) = (s))
 #else
 enum { IS_COMPILER_MSVC = 0 };
 #endif
diff --git a/internal/ceres/system_test.cc b/internal/ceres/system_test.cc
index 405dc69..88b2f91 100644
--- a/internal/ceres/system_test.cc
+++ b/internal/ceres/system_test.cc
@@ -45,6 +45,7 @@
 
 #include <glog/logging.h>
 #include "ceres/file.h"
+#include "gflags/gflags.h"
 #include "gtest/gtest.h"
 #include "ceres/stringprintf.h"
 #include "ceres/test_util.h"
@@ -310,10 +311,8 @@
 class BundleAdjustmentProblem {
  public:
   BundleAdjustmentProblem() {
-    const string input_file =
-        JoinPath(FLAGS_test_srcdir,
-                       "problem-16-22106-pre.txt"); // NOLINT
-
+    const string input_file = JoinPath(FLAGS_test_srcdir,
+                                       "problem-16-22106-pre.txt");
     ReadData(input_file);
     BuildProblem();
   }
diff --git a/internal/ceres/triplet_sparse_matrix.cc b/internal/ceres/triplet_sparse_matrix.cc
index 247ab2e..3f5c5ca 100644
--- a/internal/ceres/triplet_sparse_matrix.cc
+++ b/internal/ceres/triplet_sparse_matrix.cc
@@ -130,7 +130,7 @@
 
 void TripletSparseMatrix::Reserve(int new_max_num_nonzeros) {
   CHECK_LE(num_nonzeros_, new_max_num_nonzeros)
-    << "Reallocation will cause data loss";
+      << "Reallocation will cause data loss";
 
   // Nothing to do if we have enough space already.
   if (new_max_num_nonzeros <= max_num_nonzeros_)
diff --git a/internal/ceres/triplet_sparse_matrix_test.cc b/internal/ceres/triplet_sparse_matrix_test.cc
index ef3b42c..4c94658 100644
--- a/internal/ceres/triplet_sparse_matrix_test.cc
+++ b/internal/ceres/triplet_sparse_matrix_test.cc
@@ -67,7 +67,9 @@
   ASSERT_TRUE(m.AllTripletsWithinBounds());
 
   // We should never be able resize and lose data
+#ifndef _MSC_VER
   ASSERT_DEATH(m.Reserve(1), "Reallocation will cause data loss");
+#endif
 
   // We should be able to resize while preserving data
   m.Reserve(50);
diff --git a/internal/ceres/trust_region_minimizer_test.cc b/internal/ceres/trust_region_minimizer_test.cc
index d87c963..03297c0 100644
--- a/internal/ceres/trust_region_minimizer_test.cc
+++ b/internal/ceres/trust_region_minimizer_test.cc
@@ -131,7 +131,7 @@
             1.0,
             0.0,
             0.0,
-            sqrt(10) * 2.0 * (x1 - x4) * (1.0 - x4);
+            sqrt(10.0) * 2.0 * (x1 - x4) * (1.0 - x4);
       }
       if (col2) {
         jacobian_matrix.col(column_index++) <<
@@ -154,7 +154,7 @@
             0.0,
             -sqrt(5.0),
             0.0,
-            sqrt(10) * 2.0 * (x1 - x4) * (x1 - 1.0);
+            sqrt(10.0) * 2.0 * (x1 - x4) * (x1 - 1.0);
       }
       VLOG(1) << "\n" << jacobian_matrix;
     }
diff --git a/internal/ceres/trust_region_strategy.cc b/internal/ceres/trust_region_strategy.cc
index 2e058b2..89bc19d 100644
--- a/internal/ceres/trust_region_strategy.cc
+++ b/internal/ceres/trust_region_strategy.cc
@@ -20,6 +20,7 @@
 
   LOG(FATAL) << "Unknown trust region strategy: "
              << options.trust_region_strategy_type;
+  return NULL;
 }
 
 }  // namespace internal
diff --git a/internal/ceres/visibility.cc b/internal/ceres/visibility.cc
index 5dceeb8..fd41648 100644
--- a/internal/ceres/visibility.cc
+++ b/internal/ceres/visibility.cc
@@ -136,8 +136,9 @@
     CHECK_NE(camera1, camera2);
 
     const int count = it->second;
+    // Static cast necessary for Windows.
     const double weight = static_cast<double>(count) /
-        (sqrt(visibility[camera1].size() * visibility[camera2].size()));
+        (sqrt(static_cast<double>(visibility[camera1].size() * visibility[camera2].size())));
     graph->AddEdge(camera1, camera2, weight);
   }
 
