diff --git a/examples/bal_problem.cc b/examples/bal_problem.cc
index 2423fb6..c784116 100644
--- a/examples/bal_problem.cc
+++ b/examples/bal_problem.cc
@@ -298,7 +298,7 @@
   CHECK_GE(rotation_sigma, 0.0);
   CHECK_GE(translation_sigma, 0.0);
   std::mt19937 prng;
-  std::normal_distribution point_noise_distribution(0.0, point_sigma);
+  std::normal_distribution<double> point_noise_distribution(0.0, point_sigma);
   double* points = mutable_points();
   if (point_sigma > 0) {
     for (int i = 0; i < num_points_; ++i) {
@@ -307,9 +307,10 @@
     }
   }
 
-  std::normal_distribution rotation_noise_distribution(0.0, point_sigma);
-  std::normal_distribution translation_noise_distribution(0.0,
-                                                          translation_sigma);
+  std::normal_distribution<double> rotation_noise_distribution(0.0,
+                                                               point_sigma);
+  std::normal_distribution<double> translation_noise_distribution(
+      0.0, translation_sigma);
   for (int i = 0; i < num_cameras_; ++i) {
     double* camera = mutable_cameras() + camera_block_size() * i;
 
diff --git a/examples/robot_pose_mle.cc b/examples/robot_pose_mle.cc
index f924bc3..5f57a89 100644
--- a/examples/robot_pose_mle.cc
+++ b/examples/robot_pose_mle.cc
@@ -247,9 +247,10 @@
       static_cast<int>(ceil(CERES_GET_FLAG(FLAGS_corridor_length) /
                             CERES_GET_FLAG(FLAGS_pose_separation)));
   std::mt19937 prng;
-  std::normal_distribution odometry_noise(
+  std::normal_distribution<double> odometry_noise(
       0.0, CERES_GET_FLAG(FLAGS_odometry_stddev));
-  std::normal_distribution range_noise(0.0, CERES_GET_FLAG(FLAGS_range_stddev));
+  std::normal_distribution<double> range_noise(
+      0.0, CERES_GET_FLAG(FLAGS_range_stddev));
 
   // The robot starts out at the origin.
   double robot_location = 0.0;
diff --git a/internal/ceres/block_sparse_matrix.cc b/internal/ceres/block_sparse_matrix.cc
index 9ae4384..1bfa343 100644
--- a/internal/ceres/block_sparse_matrix.cc
+++ b/internal/ceres/block_sparse_matrix.cc
@@ -183,7 +183,6 @@
   for (const auto& row_block : block_structure_->rows) {
     int row_block_size = row_block.block.size;
     const vector<Cell>& cells = row_block.cells;
-    const int row_start = row_block.block.position;
     for (int r = 0; r < row_block_size; ++r) {
       rows.push_back(values.size());
       for (const auto& cell : cells) {
@@ -383,10 +382,10 @@
   CHECK_LE(options.block_density, 1.0);
 
   std::mt19937 prng;
-  std::uniform_int_distribution col_distribution(options.min_col_block_size,
-                                                 options.max_col_block_size);
-  std::uniform_int_distribution row_distribution(options.min_row_block_size,
-                                                 options.max_row_block_size);
+  std::uniform_int_distribution<int> col_distribution(
+      options.min_col_block_size, options.max_col_block_size);
+  std::uniform_int_distribution<int> row_distribution(
+      options.min_row_block_size, options.max_row_block_size);
   auto* bs = new CompressedRowBlockStructure();
   if (options.col_blocks.empty()) {
     CHECK_GT(options.num_col_blocks, 0);
@@ -406,7 +405,7 @@
   }
 
   bool matrix_has_blocks = false;
-  std::uniform_real_distribution uniform01(0.0, 1.0);
+  std::uniform_real_distribution<double> uniform01(0.0, 1.0);
   while (!matrix_has_blocks) {
     VLOG(1) << "Clearing";
     bs->rows.clear();
@@ -434,7 +433,7 @@
 
   auto matrix = std::make_unique<BlockSparseMatrix>(bs);
   double* values = matrix->mutable_values();
-  std::normal_distribution standard_normal_distribution;
+  std::normal_distribution<double> standard_normal_distribution;
   for (int i = 0; i < matrix->num_nonzeros(); ++i) {
     values[i] = standard_normal_distribution(prng);
   }
diff --git a/internal/ceres/compressed_row_sparse_matrix.cc b/internal/ceres/compressed_row_sparse_matrix.cc
index bd94fdc..da58b1a 100644
--- a/internal/ceres/compressed_row_sparse_matrix.cc
+++ b/internal/ceres/compressed_row_sparse_matrix.cc
@@ -648,12 +648,12 @@
   vector<int> col_blocks;
 
   std::mt19937 prng;
-  std::uniform_int_distribution col_distribution(options.min_col_block_size,
-                                                 options.max_col_block_size);
-  std::uniform_int_distribution row_distribution(options.min_row_block_size,
-                                                 options.max_row_block_size);
-  std::uniform_real_distribution uniform01(0.0, 1.0);
-  std::normal_distribution standard_normal_distribution;
+  std::uniform_int_distribution<int> col_distribution(
+      options.min_col_block_size, options.max_col_block_size);
+  std::uniform_int_distribution<int> row_distribution(
+      options.min_row_block_size, options.max_row_block_size);
+  std::uniform_real_distribution<double> uniform01(0.0, 1.0);
+  std::normal_distribution<double> standard_normal_distribution;
   auto values_dist = std::bind(standard_normal_distribution, std::ref(prng));
 
   // Generate the row block structure.
diff --git a/internal/ceres/compressed_row_sparse_matrix_test.cc b/internal/ceres/compressed_row_sparse_matrix_test.cc
index db90d8b..0f1b948 100644
--- a/internal/ceres/compressed_row_sparse_matrix_test.cc
+++ b/internal/ceres/compressed_row_sparse_matrix_test.cc
@@ -405,7 +405,7 @@
   const int kMaxBlockSize = 5;
   const int kNumTrials = 10;
   std::mt19937 prng;
-  std::uniform_real_distribution uniform(0.5, 1.0);
+  std::uniform_real_distribution<double> uniform(0.5, 1.0);
   for (int num_blocks = kMinNumBlocks; num_blocks < kMaxNumBlocks;
        ++num_blocks) {
     for (int trial = 0; trial < kNumTrials; ++trial) {
@@ -475,7 +475,7 @@
   const int kMaxBlockSize = 5;
   const int kNumTrials = 10;
   std::mt19937 prng;
-  std::uniform_real_distribution uniform(0.5, 1.0);
+  std::uniform_real_distribution<double> uniform(0.5, 1.0);
   for (int num_blocks = kMinNumBlocks; num_blocks < kMaxNumBlocks;
        ++num_blocks) {
     for (int trial = 0; trial < kNumTrials; ++trial) {
@@ -545,7 +545,7 @@
   const int kMaxBlockSize = 5;
   const int kNumTrials = 10;
   std::mt19937 prng;
-  std::uniform_real_distribution uniform(0.5, 1.0);
+  std::uniform_real_distribution<double> uniform(0.5, 1.0);
   for (int num_blocks = kMinNumBlocks; num_blocks < kMaxNumBlocks;
        ++num_blocks) {
     for (int trial = 0; trial < kNumTrials; ++trial) {
diff --git a/internal/ceres/corrector_test.cc b/internal/ceres/corrector_test.cc
index b1e9bee..7f58efa 100644
--- a/internal/ceres/corrector_test.cc
+++ b/internal/ceres/corrector_test.cc
@@ -161,7 +161,7 @@
   Matrix c_hess(2, 2);
   Vector c_grad(2);
   std::mt19937 prng;
-  std::uniform_real_distribution uniform01(0.0, 1.0);
+  std::uniform_real_distribution<double> uniform01(0.0, 1.0);
   for (int iter = 0; iter < 10000; ++iter) {
     // Initialize the jacobian and residual.
     for (double& jacobian_entry : jacobian) jacobian_entry = uniform01(prng);
@@ -229,7 +229,7 @@
   Vector c_grad(2);
 
   std::mt19937 prng;
-  std::uniform_real_distribution uniform01(0.0, 1.0);
+  std::uniform_real_distribution<double> uniform01(0.0, 1.0);
   for (int iter = 0; iter < 10000; ++iter) {
     // Initialize the jacobian.
     for (double& jacobian_entry : jacobian) jacobian_entry = uniform01(prng);
diff --git a/internal/ceres/gradient_checker_test.cc b/internal/ceres/gradient_checker_test.cc
index 5de4778..3c5f5da 100644
--- a/internal/ceres/gradient_checker_test.cc
+++ b/internal/ceres/gradient_checker_test.cc
@@ -61,7 +61,7 @@
  public:
   GoodTestTerm(int arity, int const* dim) : arity_(arity), return_value_(true) {
     std::mt19937 prng;
-    std::uniform_real_distribution distribution(-1.0, 1.0);
+    std::uniform_real_distribution<double> distribution(-1.0, 1.0);
 
     // Make 'arity' random vectors.
     a_.resize(arity_);
@@ -123,7 +123,7 @@
  public:
   BadTestTerm(int arity, int const* dim) : arity_(arity) {
     std::mt19937 prng;
-    std::uniform_real_distribution distribution(-1.0, 1.0);
+    std::uniform_real_distribution<double> distribution(-1.0, 1.0);
     // Make 'arity' random vectors.
     a_.resize(arity_);
     for (int j = 0; j < arity_; ++j) {
@@ -209,7 +209,7 @@
   // Make a random set of blocks.
   FixedArray<double*> parameters(num_parameters);
   std::mt19937 prng;
-  std::uniform_real_distribution distribution(-1.0, 1.0);
+  std::uniform_real_distribution<double> distribution(-1.0, 1.0);
   for (int j = 0; j < num_parameters; ++j) {
     parameters[j] = new double[parameter_sizes[j]];
     for (int u = 0; u < parameter_sizes[j]; ++u) {
diff --git a/internal/ceres/gradient_checking_cost_function_test.cc b/internal/ceres/gradient_checking_cost_function_test.cc
index 99e0727..caf4f25 100644
--- a/internal/ceres/gradient_checking_cost_function_test.cc
+++ b/internal/ceres/gradient_checking_cost_function_test.cc
@@ -71,7 +71,7 @@
   // of blocks desired, and the size of each block.
   TestTerm(int arity, int const* dim) : arity_(arity) {
     std::mt19937 prng;
-    std::uniform_real_distribution uniform01(-1.0, 1.0);
+    std::uniform_real_distribution<double> uniform01(-1.0, 1.0);
     // Make 'arity' random vectors.
     a_.resize(arity_);
     for (int j = 0; j < arity_; ++j) {
@@ -139,7 +139,7 @@
   // Make a random set of blocks.
   vector<double*> parameters(arity);
   std::mt19937 prng;
-  std::uniform_real_distribution uniform01(-1.0, 1.0);
+  std::uniform_real_distribution<double> uniform01(-1.0, 1.0);
   for (int j = 0; j < arity; ++j) {
     parameters[j] = new double[dim[j]];
     for (int u = 0; u < dim[j]; ++u) {
@@ -196,7 +196,7 @@
   // Make a random set of blocks.
   vector<double*> parameters(arity);
   std::mt19937 prng;
-  std::uniform_real_distribution uniform01(-1.0, 1.0);
+  std::uniform_real_distribution<double> uniform01(-1.0, 1.0);
   for (int j = 0; j < arity; ++j) {
     parameters[j] = new double[dim[j]];
     for (int u = 0; u < dim[j]; ++u) {
diff --git a/internal/ceres/inner_product_computer_test.cc b/internal/ceres/inner_product_computer_test.cc
index 9c0382b..5bd4c50 100644
--- a/internal/ceres/inner_product_computer_test.cc
+++ b/internal/ceres/inner_product_computer_test.cc
@@ -81,7 +81,7 @@
   const int kMaxNumColBlocks = 10;
   const int kNumTrials = 10;
   std::mt19937 prng;
-  std::uniform_real_distribution distribution(0.01, 1.0);
+  std::uniform_real_distribution<double> distribution(0.01, 1.0);
 
   // Create a random matrix, compute its outer product using Eigen and
   // ComputeOuterProduct. Convert both matrices to dense matrices and
@@ -145,7 +145,7 @@
   const int kNumColBlocks = 20;
   const int kNumTrials = 5;
   std::mt19937 prng;
-  std::uniform_real_distribution distribution(0.01, 1.0);
+  std::uniform_real_distribution<double> distribution(0.01, 1.0);
 
   // Create a random matrix, compute its outer product using Eigen and
   // ComputeInnerProductComputer. Convert both matrices to dense matrices and
diff --git a/internal/ceres/normal_prior_test.cc b/internal/ceres/normal_prior_test.cc
index 9c84555..25e6322 100644
--- a/internal/ceres/normal_prior_test.cc
+++ b/internal/ceres/normal_prior_test.cc
@@ -41,7 +41,7 @@
 
 TEST(NormalPriorTest, ResidualAtRandomPosition) {
   std::mt19937 prng;
-  std::uniform_real_distribution distribution(-1.0, 1.0);
+  std::uniform_real_distribution<double> distribution(-1.0, 1.0);
   for (int num_rows = 1; num_rows < 5; ++num_rows) {
     for (int num_cols = 1; num_cols < 5; ++num_cols) {
       Vector b(num_cols);
@@ -76,7 +76,7 @@
 
 TEST(NormalPriorTest, ResidualAtRandomPositionNullJacobians) {
   std::mt19937 prng;
-  std::uniform_real_distribution distribution(-1.0, 1.0);
+  std::uniform_real_distribution<double> distribution(-1.0, 1.0);
   for (int num_rows = 1; num_rows < 5; ++num_rows) {
     for (int num_cols = 1; num_cols < 5; ++num_cols) {
       Vector b(num_cols);
diff --git a/internal/ceres/sparse_cholesky_test.cc b/internal/ceres/sparse_cholesky_test.cc
index e99d59b..73e1455 100644
--- a/internal/ceres/sparse_cholesky_test.cc
+++ b/internal/ceres/sparse_cholesky_test.cc
@@ -171,7 +171,7 @@
   const int kMinBlockSize = 1;
   const int kMaxBlockSize = 5;
   std::mt19937 prng;
-  std::uniform_real_distribution distribution(0.1, 1.0);
+  std::uniform_real_distribution<double> distribution(0.1, 1.0);
 
   for (int num_blocks = kMinNumBlocks; num_blocks < kMaxNumBlocks;
        ++num_blocks) {
diff --git a/internal/ceres/triplet_sparse_matrix.cc b/internal/ceres/triplet_sparse_matrix.cc
index c5ff2e5..b8f43ad 100644
--- a/internal/ceres/triplet_sparse_matrix.cc
+++ b/internal/ceres/triplet_sparse_matrix.cc
@@ -318,8 +318,8 @@
   std::vector<int> cols;
   std::vector<double> values;
   std::mt19937 prng;
-  std::uniform_real_distribution uniform01(0.0, 1.0);
-  std::uniform_real_distribution standard_normal;
+  std::uniform_real_distribution<double> uniform01(0.0, 1.0);
+  std::normal_distribution<double> standard_normal;
   while (rows.empty()) {
     rows.clear();
     cols.clear();
