A bunch of minor fixes.

1. Remove an unused variable from block_sparse_matrix.cc
2. Add explicit types to the distributions to get around
   -Wctad-maybe-unsupported

Change-Id: Ib7d606fbfe2b93ba4fce408f38ee4f7626b74ff0
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();