diff --git a/examples/powell.cc b/examples/powell.cc
index 614c9c6..c75ad24 100644
--- a/examples/powell.cc
+++ b/examples/powell.cc
@@ -45,6 +45,7 @@
 // Vol 7(1), March 1981.
 
 #include <vector>
+
 #include "ceres/ceres.h"
 #include "gflags/gflags.h"
 #include "glog/logging.h"
@@ -52,13 +53,12 @@
 using ceres::AutoDiffCostFunction;
 using ceres::CostFunction;
 using ceres::Problem;
-using ceres::Solver;
 using ceres::Solve;
+using ceres::Solver;
 
 struct F1 {
-  template <typename T> bool operator()(const T* const x1,
-                                        const T* const x2,
-                                        T* residual) const {
+  template <typename T>
+  bool operator()(const T* const x1, const T* const x2, T* residual) const {
     // f1 = x1 + 10 * x2;
     residual[0] = x1[0] + 10.0 * x2[0];
     return true;
@@ -66,9 +66,8 @@
 };
 
 struct F2 {
-  template <typename T> bool operator()(const T* const x3,
-                                        const T* const x4,
-                                        T* residual) const {
+  template <typename T>
+  bool operator()(const T* const x3, const T* const x4, T* residual) const {
     // f2 = sqrt(5) (x3 - x4)
     residual[0] = sqrt(5.0) * (x3[0] - x4[0]);
     return true;
@@ -76,9 +75,8 @@
 };
 
 struct F3 {
-  template <typename T> bool operator()(const T* const x2,
-                                        const T* const x3,
-                                        T* residual) const {
+  template <typename T>
+  bool operator()(const T* const x2, const T* const x3, T* residual) const {
     // f3 = (x2 - 2 x3)^2
     residual[0] = (x2[0] - 2.0 * x3[0]) * (x2[0] - 2.0 * x3[0]);
     return true;
@@ -86,47 +84,44 @@
 };
 
 struct F4 {
-  template <typename T> bool operator()(const T* const x1,
-                                        const T* const x4,
-                                        T* residual) const {
+  template <typename T>
+  bool operator()(const T* const x1, const T* const x4, T* residual) const {
     // f4 = sqrt(10) (x1 - x4)^2
     residual[0] = sqrt(10.0) * (x1[0] - x4[0]) * (x1[0] - x4[0]);
     return true;
   }
 };
 
-DEFINE_string(minimizer, "trust_region",
+DEFINE_string(minimizer,
+              "trust_region",
               "Minimizer type to use, choices are: line_search & trust_region");
 
 int main(int argc, char** argv) {
-  CERES_GFLAGS_NAMESPACE::ParseCommandLineFlags(&argc, &argv, true);
+  GFLAGS_NAMESPACE::ParseCommandLineFlags(&argc, &argv, true);
   google::InitGoogleLogging(argv[0]);
 
-  double x1 =  3.0;
+  double x1 = 3.0;
   double x2 = -1.0;
-  double x3 =  0.0;
-  double x4 =  1.0;
+  double x3 = 0.0;
+  double x4 = 1.0;
 
   Problem problem;
   // Add residual terms to the problem using the using the autodiff
   // wrapper to get the derivatives automatically. The parameters, x1 through
   // x4, are modified in place.
-  problem.AddResidualBlock(new AutoDiffCostFunction<F1, 1, 1, 1>(new F1),
-                           NULL,
-                           &x1, &x2);
-  problem.AddResidualBlock(new AutoDiffCostFunction<F2, 1, 1, 1>(new F2),
-                           NULL,
-                           &x3, &x4);
-  problem.AddResidualBlock(new AutoDiffCostFunction<F3, 1, 1, 1>(new F3),
-                           NULL,
-                           &x2, &x3);
-  problem.AddResidualBlock(new AutoDiffCostFunction<F4, 1, 1, 1>(new F4),
-                           NULL,
-                           &x1, &x4);
+  problem.AddResidualBlock(
+      new AutoDiffCostFunction<F1, 1, 1, 1>(new F1), NULL, &x1, &x2);
+  problem.AddResidualBlock(
+      new AutoDiffCostFunction<F2, 1, 1, 1>(new F2), NULL, &x3, &x4);
+  problem.AddResidualBlock(
+      new AutoDiffCostFunction<F3, 1, 1, 1>(new F3), NULL, &x2, &x3);
+  problem.AddResidualBlock(
+      new AutoDiffCostFunction<F4, 1, 1, 1>(new F4), NULL, &x1, &x4);
 
   Solver::Options options;
-  LOG_IF(FATAL, !ceres::StringToMinimizerType(FLAGS_minimizer,
-                                              &options.minimizer_type))
+  LOG_IF(
+      FATAL,
+      !ceres::StringToMinimizerType(FLAGS_minimizer, &options.minimizer_type))
       << "Invalid minimizer: " << FLAGS_minimizer
       << ", valid options are: trust_region and line_search.";
 
@@ -134,21 +129,25 @@
   options.linear_solver_type = ceres::DENSE_QR;
   options.minimizer_progress_to_stdout = true;
 
+  // clang-format off
   std::cout << "Initial x1 = " << x1
             << ", x2 = " << x2
             << ", x3 = " << x3
             << ", x4 = " << x4
             << "\n";
+  // clang-format on
 
   // Run the solver!
   Solver::Summary summary;
   Solve(options, &problem, &summary);
 
   std::cout << summary.FullReport() << "\n";
+  // clang-format off
   std::cout << "Final x1 = " << x1
             << ", x2 = " << x2
             << ", x3 = " << x3
             << ", x4 = " << x4
             << "\n";
+  // clang-format on
   return 0;
 }
