diff --git a/examples/nist.cc b/examples/nist.cc
index 81c3f2a..ceeb457 100644
--- a/examples/nist.cc
+++ b/examples/nist.cc
@@ -238,7 +238,7 @@
     }
   }
 
-  Matrix initial_parameters(int start) const { return initial_parameters_.row(start); }
+  Matrix initial_parameters(int start) const { return initial_parameters_.row(start); }  // NOLINT
   Matrix final_parameters() const  { return final_parameters_; }
   Matrix predictor()        const { return predictor_;         }
   Matrix response()         const { return response_;          }
@@ -297,7 +297,7 @@
 NIST_BEGIN(Gauss)
   b[0] * exp(-b[1] * x) +
   b[2] * exp(-pow((x - b[3])/b[4], 2)) +
-  b[5] * exp(-pow((x - b[6])/b[7],2))
+  b[5] * exp(-pow((x - b[6])/b[7], 2))
 NIST_END
 
 // y = b1*exp(-b2*x) + b3*exp(-b4*x) + b5*exp(-b6*x)  +  e
@@ -341,7 +341,7 @@
 
 // y = b1 * (1-(1+b2*x/2)**(-2))  +  e
 NIST_BEGIN(Misra1b)
-  b[0] * (T(1.0) - T(1.0)/ ((T(1.0) + b[1] * x / 2.0) * (T(1.0) + b[1] * x / 2.0)))
+  b[0] * (T(1.0) - T(1.0)/ ((T(1.0) + b[1] * x / 2.0) * (T(1.0) + b[1] * x / 2.0)))  // NOLINT
 NIST_END
 
 // y = b1 * (1-(1+2*b2*x)**(-.5))  +  e
@@ -434,8 +434,9 @@
 
     ceres::Problem problem;
     for (int i = 0; i < nist_problem.num_observations(); ++i) {
-      Model* model = new Model(predictor.data() + nist_problem.predictor_size() * i,
-                               response.data() + nist_problem.response_size() * i);
+      Model* model = new Model(
+          predictor.data() + nist_problem.predictor_size() * i,
+          response.data() + nist_problem.response_size() * i);
       ceres::CostFunction* cost_function = NULL;
       if (FLAGS_use_numeric_diff) {
         cost_function =
@@ -582,7 +583,8 @@
   cout << "Easy    : " << easy_success << "/16\n";
   cout << "Medium  : " << medium_success << "/22\n";
   cout << "Hard    : " << hard_success << "/16\n";
-  cout << "Total   : " << easy_success + medium_success + hard_success << "/54\n";
+  cout << "Total   : "
+       << easy_success + medium_success + hard_success << "/54\n";
 }
 
 }  // namespace examples
@@ -593,4 +595,4 @@
   google::InitGoogleLogging(argv[0]);
   ceres::examples::SolveNISTProblems();
   return 0;
-};
+}
diff --git a/internal/ceres/reorder_program_test.cc b/internal/ceres/reorder_program_test.cc
index 661c86c..be548ef 100644
--- a/internal/ceres/reorder_program_test.cc
+++ b/internal/ceres/reorder_program_test.cc
@@ -170,7 +170,8 @@
 }
 
 #ifndef CERES_NO_SUITESPARSE
-class ReorderProgramForSparseNormalCholeskyUsingSuiteSparseTest : public ::testing::Test {
+class ReorderProgramForSparseNormalCholeskyUsingSuiteSparseTest :
+      public ::testing::Test {
  protected:
   void SetUp() {
     problem_.AddResidualBlock(new UnaryCostFunction(), NULL, &x_);
@@ -179,9 +180,10 @@
     problem_.AddResidualBlock(new UnaryCostFunction(), NULL, &z_);
     problem_.AddResidualBlock(new BinaryCostFunction(), NULL, &x_, &y_);
     problem_.AddResidualBlock(new UnaryCostFunction(), NULL, &y_);
-  };
+  }
 
-  void ComputeAndValidateOrdering(const ParameterBlockOrdering& linear_solver_ordering) {
+  void ComputeAndValidateOrdering(
+      const ParameterBlockOrdering& linear_solver_ordering) {
     Program* program = problem_.mutable_program();
     vector<ParameterBlock*> unordered_parameter_blocks =
         program->parameter_blocks();
@@ -207,7 +209,8 @@
   double z_;
 };
 
-TEST_F(ReorderProgramForSparseNormalCholeskyUsingSuiteSparseTest, EverythingInGroupZero) {
+TEST_F(ReorderProgramForSparseNormalCholeskyUsingSuiteSparseTest,
+       EverythingInGroupZero) {
   ParameterBlockOrdering linear_solver_ordering;
   linear_solver_ordering.AddElementToGroup(&x_, 0);
   linear_solver_ordering.AddElementToGroup(&y_, 0);
@@ -216,7 +219,8 @@
   ComputeAndValidateOrdering(linear_solver_ordering);
 }
 
-TEST_F(ReorderProgramForSparseNormalCholeskyUsingSuiteSparseTest, ContiguousGroups) {
+TEST_F(ReorderProgramForSparseNormalCholeskyUsingSuiteSparseTest,
+       ContiguousGroups) {
   ParameterBlockOrdering linear_solver_ordering;
   linear_solver_ordering.AddElementToGroup(&x_, 0);
   linear_solver_ordering.AddElementToGroup(&y_, 1);
@@ -225,7 +229,8 @@
   ComputeAndValidateOrdering(linear_solver_ordering);
 }
 
-TEST_F(ReorderProgramForSparseNormalCholeskyUsingSuiteSparseTest, GroupsWithGaps) {
+TEST_F(ReorderProgramForSparseNormalCholeskyUsingSuiteSparseTest,
+       GroupsWithGaps) {
   ParameterBlockOrdering linear_solver_ordering;
   linear_solver_ordering.AddElementToGroup(&x_, 0);
   linear_solver_ordering.AddElementToGroup(&y_, 2);
