diff --git a/include/ceres/autodiff_first_order_function.h b/include/ceres/autodiff_first_order_function.h
index c3c5cb2..fa63785 100644
--- a/include/ceres/autodiff_first_order_function.h
+++ b/include/ceres/autodiff_first_order_function.h
@@ -110,7 +110,7 @@
     static_assert(kNumParameters > 0, "kNumParameters must be positive");
   }
 
-  ~AutoDiffFirstOrderFunction() override {}
+  ~AutoDiffFirstOrderFunction() override = default;
 
   bool Evaluate(const double* const parameters,
                 double* cost,
diff --git a/include/ceres/autodiff_local_parameterization.h b/include/ceres/autodiff_local_parameterization.h
index 38bc45a..aadee81 100644
--- a/include/ceres/autodiff_local_parameterization.h
+++ b/include/ceres/autodiff_local_parameterization.h
@@ -114,7 +114,7 @@
   explicit AutoDiffLocalParameterization(Functor* functor)
       : functor_(functor) {}
 
-  ~AutoDiffLocalParameterization() override {}
+  ~AutoDiffLocalParameterization() override = default;
   bool Plus(const double* x,
             const double* delta,
             double* x_plus_delta) const override {
diff --git a/include/ceres/autodiff_manifold.h b/include/ceres/autodiff_manifold.h
index 9673533..fa326ac 100644
--- a/include/ceres/autodiff_manifold.h
+++ b/include/ceres/autodiff_manifold.h
@@ -152,7 +152,7 @@
   // Takes ownership of functor.
   explicit AutoDiffManifold(Functor* functor) : functor_(functor) {}
 
-  ~AutoDiffManifold() override {}
+  ~AutoDiffManifold() override = default;
 
   int AmbientSize() const override { return kAmbientSize; }
   int TangentSize() const override { return kTangentSize; }
diff --git a/include/ceres/context.h b/include/ceres/context.h
index d08e32b..e22df7e 100644
--- a/include/ceres/context.h
+++ b/include/ceres/context.h
@@ -41,11 +41,11 @@
 // (e.g. threads) managed by the Context.
 class Context {
  public:
-  Context() {}
+  Context() = default;
   Context(const Context&) = delete;
   void operator=(const Context&) = delete;
 
-  virtual ~Context() {}
+  virtual ~Context() = default;
 
   // Creates a context object and the caller takes ownership.
   static Context* Create();
diff --git a/include/ceres/cost_function.h b/include/ceres/cost_function.h
index d1550c1..7e0f2cc 100644
--- a/include/ceres/cost_function.h
+++ b/include/ceres/cost_function.h
@@ -67,7 +67,7 @@
   CostFunction(const CostFunction&) = delete;
   void operator=(const CostFunction&) = delete;
 
-  virtual ~CostFunction() {}
+  virtual ~CostFunction() = default;
 
   // Inputs:
   //
diff --git a/include/ceres/dynamic_cost_function.h b/include/ceres/dynamic_cost_function.h
index 2afb08d..4d0c2bc 100644
--- a/include/ceres/dynamic_cost_function.h
+++ b/include/ceres/dynamic_cost_function.h
@@ -40,7 +40,7 @@
 // parameter blocks and set the number of residuals at run time.
 class CERES_EXPORT DynamicCostFunction : public CostFunction {
  public:
-  ~DynamicCostFunction() override {}
+  ~DynamicCostFunction() override = default;
 
   virtual void AddParameterBlock(int size) {
     mutable_parameter_block_sizes()->push_back(size);
diff --git a/include/ceres/evaluation_callback.h b/include/ceres/evaluation_callback.h
index b9f5bbb..2ff7c47 100644
--- a/include/ceres/evaluation_callback.h
+++ b/include/ceres/evaluation_callback.h
@@ -62,7 +62,7 @@
 // execute faster.
 class CERES_EXPORT EvaluationCallback {
  public:
-  virtual ~EvaluationCallback() {}
+  virtual ~EvaluationCallback() = default;
 
   // Called before Ceres requests residuals or jacobians for a given setting of
   // the parameters. User parameters (the double* values provided to the cost
diff --git a/include/ceres/first_order_function.h b/include/ceres/first_order_function.h
index 1420153..eb66c5a 100644
--- a/include/ceres/first_order_function.h
+++ b/include/ceres/first_order_function.h
@@ -39,7 +39,7 @@
 // and its gradient.
 class CERES_EXPORT FirstOrderFunction {
  public:
-  virtual ~FirstOrderFunction() {}
+  virtual ~FirstOrderFunction() = default;
 
   // cost is never null. gradient may be null. The return value
   // indicates whether the evaluation was successful or not.
diff --git a/include/ceres/iteration_callback.h b/include/ceres/iteration_callback.h
index 4507fdf..d52d466 100644
--- a/include/ceres/iteration_callback.h
+++ b/include/ceres/iteration_callback.h
@@ -194,7 +194,7 @@
 //
 class CERES_EXPORT IterationCallback {
  public:
-  virtual ~IterationCallback() {}
+  virtual ~IterationCallback() = default;
   virtual CallbackReturnType operator()(const IterationSummary& summary) = 0;
 };
 
diff --git a/include/ceres/local_parameterization.h b/include/ceres/local_parameterization.h
index 0144e7d..b92ec9b 100644
--- a/include/ceres/local_parameterization.h
+++ b/include/ceres/local_parameterization.h
@@ -155,7 +155,7 @@
 class CERES_EXPORT IdentityParameterization : public LocalParameterization {
  public:
   explicit IdentityParameterization(int size);
-  ~IdentityParameterization() override {}
+  ~IdentityParameterization() override = default;
   bool Plus(const double* x,
             const double* delta,
             double* x_plus_delta) const override;
@@ -176,7 +176,7 @@
  public:
   explicit SubsetParameterization(int size,
                                   const std::vector<int>& constant_parameters);
-  ~SubsetParameterization() override {}
+  ~SubsetParameterization() override = default;
   bool Plus(const double* x,
             const double* delta,
             double* x_plus_delta) const override;
@@ -201,7 +201,7 @@
 // theta) part.
 class CERES_EXPORT QuaternionParameterization : public LocalParameterization {
  public:
-  ~QuaternionParameterization() override {}
+  ~QuaternionParameterization() override = default;
   bool Plus(const double* x,
             const double* delta,
             double* x_plus_delta) const override;
@@ -224,7 +224,7 @@
 class CERES_EXPORT EigenQuaternionParameterization
     : public ceres::LocalParameterization {
  public:
-  ~EigenQuaternionParameterization() override {}
+  ~EigenQuaternionParameterization() override = default;
   bool Plus(const double* x,
             const double* delta,
             double* x_plus_delta) const override;
@@ -250,7 +250,7 @@
     : public LocalParameterization {
  public:
   explicit HomogeneousVectorParameterization(int size);
-  ~HomogeneousVectorParameterization() override {}
+  ~HomogeneousVectorParameterization() override = default;
   bool Plus(const double* x,
             const double* delta,
             double* x_plus_delta) const override;
@@ -306,7 +306,7 @@
  public:
   ProductParameterization(const ProductParameterization&) = delete;
   ProductParameterization& operator=(const ProductParameterization&) = delete;
-  ~ProductParameterization() override {}
+  ~ProductParameterization() override = default;
   //
   // NOTE: The constructor takes ownership of the input local
   // parameterizations.
diff --git a/include/ceres/loss_function.h b/include/ceres/loss_function.h
index 5c7bb85..4da78bf 100644
--- a/include/ceres/loss_function.h
+++ b/include/ceres/loss_function.h
@@ -85,7 +85,7 @@
 
 class CERES_EXPORT LossFunction {
  public:
-  virtual ~LossFunction() {}
+  virtual ~LossFunction() = default;
 
   // For a residual vector with squared 2-norm 'sq_norm', this method
   // is required to fill in the value and derivatives of the loss
diff --git a/include/ceres/manifold.h b/include/ceres/manifold.h
index c3715d9..da56500 100644
--- a/include/ceres/manifold.h
+++ b/include/ceres/manifold.h
@@ -293,7 +293,7 @@
  public:
   ProductManifold(const ProductManifold&) = delete;
   ProductManifold& operator=(const ProductManifold&) = delete;
-  ~ProductManifold() override {}
+  ~ProductManifold() override = default;
 
   // NOTE: The constructor takes ownership of the input
   // manifolds.
diff --git a/include/ceres/sized_cost_function.h b/include/ceres/sized_cost_function.h
index 55355bd..b8a6a8c 100644
--- a/include/ceres/sized_cost_function.h
+++ b/include/ceres/sized_cost_function.h
@@ -61,7 +61,7 @@
     *mutable_parameter_block_sizes() = std::vector<int32_t>{Ns...};
   }
 
-  ~SizedCostFunction() override {}
+  ~SizedCostFunction() override = default;
 
   // Subclasses must implement Evaluate().
 };
diff --git a/internal/ceres/autodiff_benchmarks/brdf_cost_function.h b/internal/ceres/autodiff_benchmarks/brdf_cost_function.h
index 9d7c0cc..715d8b0 100644
--- a/internal/ceres/autodiff_benchmarks/brdf_cost_function.h
+++ b/internal/ceres/autodiff_benchmarks/brdf_cost_function.h
@@ -45,7 +45,7 @@
 // https://github.com/wdas/brdf/blob/master/src/brdfs/disney.brdf
 struct Brdf {
  public:
-  Brdf() {}
+  Brdf() = default;
 
   template <typename T>
   inline bool operator()(const T* const material,
diff --git a/internal/ceres/block_jacobi_preconditioner.cc b/internal/ceres/block_jacobi_preconditioner.cc
index 6f37aca..7459310 100644
--- a/internal/ceres/block_jacobi_preconditioner.cc
+++ b/internal/ceres/block_jacobi_preconditioner.cc
@@ -50,7 +50,7 @@
   m_.reset(new BlockRandomAccessDiagonalMatrix(blocks));
 }
 
-BlockJacobiPreconditioner::~BlockJacobiPreconditioner() {}
+BlockJacobiPreconditioner::~BlockJacobiPreconditioner() = default;
 
 bool BlockJacobiPreconditioner::UpdateImpl(const BlockSparseMatrix& A,
                                            const double* D) {
diff --git a/internal/ceres/block_random_access_dense_matrix.cc b/internal/ceres/block_random_access_dense_matrix.cc
index 386f81e..f2ac0b8 100644
--- a/internal/ceres/block_random_access_dense_matrix.cc
+++ b/internal/ceres/block_random_access_dense_matrix.cc
@@ -60,7 +60,7 @@
 
 // Assume that the user does not hold any locks on any cell blocks
 // when they are calling SetZero.
-BlockRandomAccessDenseMatrix::~BlockRandomAccessDenseMatrix() {}
+BlockRandomAccessDenseMatrix::~BlockRandomAccessDenseMatrix() = default;
 
 CellInfo* BlockRandomAccessDenseMatrix::GetCell(const int row_block_id,
                                                 const int col_block_id,
diff --git a/internal/ceres/block_random_access_matrix.cc b/internal/ceres/block_random_access_matrix.cc
index ea88855..8e70c04 100644
--- a/internal/ceres/block_random_access_matrix.cc
+++ b/internal/ceres/block_random_access_matrix.cc
@@ -33,7 +33,7 @@
 namespace ceres {
 namespace internal {
 
-BlockRandomAccessMatrix::~BlockRandomAccessMatrix() {}
+BlockRandomAccessMatrix::~BlockRandomAccessMatrix() = default;
 
 }  // namespace internal
 }  // namespace ceres
diff --git a/internal/ceres/block_sparse_matrix.cc b/internal/ceres/block_sparse_matrix.cc
index 5efd2e1..4db409d 100644
--- a/internal/ceres/block_sparse_matrix.cc
+++ b/internal/ceres/block_sparse_matrix.cc
@@ -46,7 +46,7 @@
 
 using std::vector;
 
-BlockSparseMatrix::~BlockSparseMatrix() {}
+BlockSparseMatrix::~BlockSparseMatrix() = default;
 
 BlockSparseMatrix::BlockSparseMatrix(
     CompressedRowBlockStructure* block_structure)
diff --git a/internal/ceres/block_structure.h b/internal/ceres/block_structure.h
index d49d7d3..39f85a2 100644
--- a/internal/ceres/block_structure.h
+++ b/internal/ceres/block_structure.h
@@ -71,7 +71,7 @@
 bool CellLessThan(const Cell& lhs, const Cell& rhs);
 
 struct CompressedList {
-  CompressedList() {}
+  CompressedList() = default;
 
   // Construct a CompressedList with the cells containing num_cells
   // entries.
diff --git a/internal/ceres/c_api.cc b/internal/ceres/c_api.cc
index a813fd4..a604e56 100644
--- a/internal/ceres/c_api.cc
+++ b/internal/ceres/c_api.cc
@@ -78,7 +78,7 @@
     }
   }
 
-  ~CallbackCostFunction() override {}
+  ~CallbackCostFunction() override = default;
 
   bool Evaluate(double const* const* parameters,
                 double* residuals,
diff --git a/internal/ceres/callbacks.cc b/internal/ceres/callbacks.cc
index a2692cc..70e2409 100644
--- a/internal/ceres/callbacks.cc
+++ b/internal/ceres/callbacks.cc
@@ -45,7 +45,7 @@
                                              double* parameters)
     : program_(program), parameters_(parameters) {}
 
-StateUpdatingCallback::~StateUpdatingCallback() {}
+StateUpdatingCallback::~StateUpdatingCallback() = default;
 
 CallbackReturnType StateUpdatingCallback::operator()(
     const IterationSummary& summary) {
@@ -64,7 +64,7 @@
       user_parameters_(user_parameters) {}
 
 GradientProblemSolverStateUpdatingCallback::
-    ~GradientProblemSolverStateUpdatingCallback() {}
+    ~GradientProblemSolverStateUpdatingCallback() = default;
 
 CallbackReturnType GradientProblemSolverStateUpdatingCallback::operator()(
     const IterationSummary& summary) {
@@ -80,7 +80,7 @@
                                  const bool log_to_stdout)
     : minimizer_type(minimizer_type), log_to_stdout_(log_to_stdout) {}
 
-LoggingCallback::~LoggingCallback() {}
+LoggingCallback::~LoggingCallback() = default;
 
 CallbackReturnType LoggingCallback::operator()(
     const IterationSummary& summary) {
diff --git a/internal/ceres/canonical_views_clustering.cc b/internal/ceres/canonical_views_clustering.cc
index c193735..740ab8e 100644
--- a/internal/ceres/canonical_views_clustering.cc
+++ b/internal/ceres/canonical_views_clustering.cc
@@ -48,7 +48,7 @@
 
 class CanonicalViewsClustering {
  public:
-  CanonicalViewsClustering() {}
+  CanonicalViewsClustering() = default;
 
   // Compute the canonical views clustering of the vertices of the
   // graph. centers will contain the vertices that are the identified
diff --git a/internal/ceres/cgnr_linear_operator.h b/internal/ceres/cgnr_linear_operator.h
index 82dcf2d..a0d9e85 100644
--- a/internal/ceres/cgnr_linear_operator.h
+++ b/internal/ceres/cgnr_linear_operator.h
@@ -82,7 +82,7 @@
  public:
   CgnrLinearOperator(const LinearOperator& A, const double* D)
       : A_(A), D_(D), z_(new double[A.num_rows()]) {}
-  ~CgnrLinearOperator() override {}
+  ~CgnrLinearOperator() override = default;
 
   void RightMultiply(const double* x, double* y) const final {
     std::fill(z_.get(), z_.get() + A_.num_rows(), 0.0);
diff --git a/internal/ceres/cgnr_solver.cc b/internal/ceres/cgnr_solver.cc
index 9dba1cf..2f38d30 100644
--- a/internal/ceres/cgnr_solver.cc
+++ b/internal/ceres/cgnr_solver.cc
@@ -54,7 +54,7 @@
   }
 }
 
-CgnrSolver::~CgnrSolver() {}
+CgnrSolver::~CgnrSolver() = default;
 
 LinearSolver::Summary CgnrSolver::SolveImpl(
     BlockSparseMatrix* A,
diff --git a/internal/ceres/compressed_row_sparse_matrix.cc b/internal/ceres/compressed_row_sparse_matrix.cc
index 900586c..b9e2715 100644
--- a/internal/ceres/compressed_row_sparse_matrix.cc
+++ b/internal/ceres/compressed_row_sparse_matrix.cc
@@ -266,7 +266,7 @@
   CHECK_EQ(num_nonzeros(), num_rows);
 }
 
-CompressedRowSparseMatrix::~CompressedRowSparseMatrix() {}
+CompressedRowSparseMatrix::~CompressedRowSparseMatrix() = default;
 
 void CompressedRowSparseMatrix::SetZero() {
   std::fill(values_.begin(), values_.end(), 0);
diff --git a/internal/ceres/context_impl.h b/internal/ceres/context_impl.h
index 384db12..f94d559 100644
--- a/internal/ceres/context_impl.h
+++ b/internal/ceres/context_impl.h
@@ -47,11 +47,11 @@
 
 class CERES_EXPORT_INTERNAL ContextImpl : public Context {
  public:
-  ContextImpl() {}
+  ContextImpl() = default;
   ContextImpl(const ContextImpl&) = delete;
   void operator=(const ContextImpl&) = delete;
 
-  ~ContextImpl() override {}
+  ~ContextImpl() override = default;
 
   // When compiled with C++ threading support, resize the thread pool to have
   // at min(num_thread, num_hardware_threads) where num_hardware_threads is
diff --git a/internal/ceres/coordinate_descent_minimizer.cc b/internal/ceres/coordinate_descent_minimizer.cc
index 93096ac..3c566c7 100644
--- a/internal/ceres/coordinate_descent_minimizer.cc
+++ b/internal/ceres/coordinate_descent_minimizer.cc
@@ -64,7 +64,7 @@
   CHECK(context_ != nullptr);
 }
 
-CoordinateDescentMinimizer::~CoordinateDescentMinimizer() {}
+CoordinateDescentMinimizer::~CoordinateDescentMinimizer() = default;
 
 bool CoordinateDescentMinimizer::Init(
     const Program& program,
diff --git a/internal/ceres/covariance.cc b/internal/ceres/covariance.cc
index 8e240ff..ead3287 100644
--- a/internal/ceres/covariance.cc
+++ b/internal/ceres/covariance.cc
@@ -47,7 +47,7 @@
   impl_.reset(new internal::CovarianceImpl(options));
 }
 
-Covariance::~Covariance() {}
+Covariance::~Covariance() = default;
 
 bool Covariance::Compute(
     const vector<pair<const double*, const double*>>& covariance_blocks,
diff --git a/internal/ceres/covariance_impl.cc b/internal/ceres/covariance_impl.cc
index 7ca23a8..8c00384 100644
--- a/internal/ceres/covariance_impl.cc
+++ b/internal/ceres/covariance_impl.cc
@@ -79,7 +79,7 @@
   evaluate_options_.apply_loss_function = options_.apply_loss_function;
 }
 
-CovarianceImpl::~CovarianceImpl() {}
+CovarianceImpl::~CovarianceImpl() = default;
 
 template <typename T>
 void CheckForDuplicates(std::vector<T> blocks) {
diff --git a/internal/ceres/covariance_test.cc b/internal/ceres/covariance_test.cc
index 410212b..e39b2ae 100644
--- a/internal/ceres/covariance_test.cc
+++ b/internal/ceres/covariance_test.cc
@@ -379,7 +379,7 @@
 // x_plus_delta = delta * x;
 class PolynomialParameterization : public LocalParameterization {
  public:
-  ~PolynomialParameterization() final {}
+  ~PolynomialParameterization() final = default;
 
   bool Plus(const double* x,
             const double* delta,
@@ -402,7 +402,7 @@
 // x_plus_delta = delta * x;
 class PolynomialManifold : public Manifold {
  public:
-  ~PolynomialManifold() final {}
+  ~PolynomialManifold() final = default;
 
   bool Plus(const double* x,
             const double* delta,
diff --git a/internal/ceres/cuda_buffer.h b/internal/ceres/cuda_buffer.h
index 2d983af..44e7de3 100644
--- a/internal/ceres/cuda_buffer.h
+++ b/internal/ceres/cuda_buffer.h
@@ -49,7 +49,7 @@
 template <typename T>
 class CudaBuffer {
  public:
-  CudaBuffer() {}
+  CudaBuffer() = default;
   CudaBuffer(const CudaBuffer&) = delete;
   CudaBuffer& operator=(const CudaBuffer&) = delete;
 
diff --git a/internal/ceres/dense_cholesky.h b/internal/ceres/dense_cholesky.h
index 470998a..a3514b4 100644
--- a/internal/ceres/dense_cholesky.h
+++ b/internal/ceres/dense_cholesky.h
@@ -153,7 +153,7 @@
                                     std::string* message) override;
 
  private:
-  CUDADenseCholesky32Bit() {}
+  CUDADenseCholesky32Bit() = default;
   // Initializes the cuSolverDN context, creates an asynchronous stream, and
   // associates the stream with cuSolverDN. Returns true iff initialization was
   // successful, else it returns false and a human-readable error message is
@@ -198,7 +198,7 @@
                                     std::string* message) override;
 
  private:
-  CUDADenseCholesky64Bit() {}
+  CUDADenseCholesky64Bit() = default;
   // Initializes the cuSolverDN context, creates an asynchronous stream, and
   // associates the stream with cuSolverDN. Returns true iff initialization was
   // successful, else it returns false and a human-readable error message is
diff --git a/internal/ceres/dogleg_strategy.h b/internal/ceres/dogleg_strategy.h
index 5042767..d79fb35 100644
--- a/internal/ceres/dogleg_strategy.h
+++ b/internal/ceres/dogleg_strategy.h
@@ -56,7 +56,7 @@
 class CERES_EXPORT_INTERNAL DoglegStrategy : public TrustRegionStrategy {
  public:
   explicit DoglegStrategy(const TrustRegionStrategy::Options& options);
-  ~DoglegStrategy() override {}
+  ~DoglegStrategy() override = default;
 
   // TrustRegionStrategy interface
   Summary ComputeStep(const PerSolveOptions& per_solve_options,
diff --git a/internal/ceres/dynamic_sparse_normal_cholesky_solver.h b/internal/ceres/dynamic_sparse_normal_cholesky_solver.h
index 04be570..6a2cb33 100644
--- a/internal/ceres/dynamic_sparse_normal_cholesky_solver.h
+++ b/internal/ceres/dynamic_sparse_normal_cholesky_solver.h
@@ -58,7 +58,7 @@
  public:
   explicit DynamicSparseNormalCholeskySolver(
       const LinearSolver::Options& options);
-  ~DynamicSparseNormalCholeskySolver() override {}
+  ~DynamicSparseNormalCholeskySolver() override = default;
 
  private:
   LinearSolver::Summary SolveImpl(CompressedRowSparseMatrix* A,
diff --git a/internal/ceres/eigensparse.cc b/internal/ceres/eigensparse.cc
index f24672c..1c47a02 100644
--- a/internal/ceres/eigensparse.cc
+++ b/internal/ceres/eigensparse.cc
@@ -48,7 +48,7 @@
 class EigenSparseCholeskyTemplate : public SparseCholesky {
  public:
   EigenSparseCholeskyTemplate() : analyzed_(false) {}
-  ~EigenSparseCholeskyTemplate() override {}
+  ~EigenSparseCholeskyTemplate() override = default;
   CompressedRowSparseMatrix::StorageType StorageType() const final {
     return CompressedRowSparseMatrix::LOWER_TRIANGULAR;
   }
@@ -160,7 +160,7 @@
   return sparse_cholesky;
 }
 
-EigenSparseCholesky::~EigenSparseCholesky() {}
+EigenSparseCholesky::~EigenSparseCholesky() = default;
 
 std::unique_ptr<SparseCholesky> FloatEigenSparseCholesky::Create(
     const OrderingType ordering_type) {
@@ -182,7 +182,7 @@
   return sparse_cholesky;
 }
 
-FloatEigenSparseCholesky::~FloatEigenSparseCholesky() {}
+FloatEigenSparseCholesky::~FloatEigenSparseCholesky() = default;
 
 }  // namespace internal
 }  // namespace ceres
diff --git a/internal/ceres/evaluation_callback_test.cc b/internal/ceres/evaluation_callback_test.cc
index 3736405..f81f3bd 100644
--- a/internal/ceres/evaluation_callback_test.cc
+++ b/internal/ceres/evaluation_callback_test.cc
@@ -72,7 +72,7 @@
         evaluate_num_calls(0),
         evaluate_last_parameter_hash(kUninitialized) {}
 
-  ~WigglyBowlCostFunctionAndEvaluationCallback() override {}
+  ~WigglyBowlCostFunctionAndEvaluationCallback() override = default;
 
   // Evaluation callback interface. This checks that all the preconditions are
   // met at the point that Ceres calls into it.
diff --git a/internal/ceres/evaluator.cc b/internal/ceres/evaluator.cc
index 5168741..4d69f96 100644
--- a/internal/ceres/evaluator.cc
+++ b/internal/ceres/evaluator.cc
@@ -48,7 +48,7 @@
 namespace ceres {
 namespace internal {
 
-Evaluator::~Evaluator() {}
+Evaluator::~Evaluator() = default;
 
 Evaluator* Evaluator::Create(const Evaluator::Options& options,
                              Program* program,
diff --git a/internal/ceres/fixed_array_test.cc b/internal/ceres/fixed_array_test.cc
index f29f809..287230a 100644
--- a/internal/ceres/fixed_array_test.cc
+++ b/internal/ceres/fixed_array_test.cc
@@ -500,8 +500,8 @@
 
 // PickyDelete EXPECTs its class-scope deallocation funcs are unused.
 struct PickyDelete {
-  PickyDelete() {}
-  ~PickyDelete() {}
+  PickyDelete() = default;
+  ~PickyDelete() = default;
   void operator delete(void* p) {
     EXPECT_TRUE(false) << __FUNCTION__;
     ::operator delete(p);
diff --git a/internal/ceres/gradient_checking_cost_function.cc b/internal/ceres/gradient_checking_cost_function.cc
index fbc8ea5..f786b83 100644
--- a/internal/ceres/gradient_checking_cost_function.cc
+++ b/internal/ceres/gradient_checking_cost_function.cc
@@ -80,7 +80,7 @@
     set_num_residuals(function->num_residuals());
   }
 
-  ~GradientCheckingCostFunction() override {}
+  ~GradientCheckingCostFunction() override = default;
 
   bool Evaluate(double const* const* parameters,
                 double* residuals,
diff --git a/internal/ceres/gradient_checking_cost_function_test.cc b/internal/ceres/gradient_checking_cost_function_test.cc
index 6a6e075..264a858 100644
--- a/internal/ceres/gradient_checking_cost_function_test.cc
+++ b/internal/ceres/gradient_checking_cost_function_test.cc
@@ -268,7 +268,7 @@
     set_num_residuals(num_residuals);
     mutable_parameter_block_sizes()->push_back(parameter_block_size);
   }
-  ~UnaryCostFunction() override {}
+  ~UnaryCostFunction() override = default;
 
   bool Evaluate(double const* const* parameters,
                 double* residuals,
diff --git a/internal/ceres/gradient_problem_evaluator.h b/internal/ceres/gradient_problem_evaluator.h
index 453a390..a510b25 100644
--- a/internal/ceres/gradient_problem_evaluator.h
+++ b/internal/ceres/gradient_problem_evaluator.h
@@ -47,7 +47,7 @@
  public:
   explicit GradientProblemEvaluator(const GradientProblem& problem)
       : problem_(problem) {}
-  ~GradientProblemEvaluator() override {}
+  ~GradientProblemEvaluator() override = default;
   SparseMatrix* CreateJacobian() const final { return nullptr; }
   bool Evaluate(const EvaluateOptions& evaluate_options,
                 const double* state,
diff --git a/internal/ceres/gradient_problem_solver.cc b/internal/ceres/gradient_problem_solver.cc
index b72fad9..f754274 100644
--- a/internal/ceres/gradient_problem_solver.cc
+++ b/internal/ceres/gradient_problem_solver.cc
@@ -92,7 +92,7 @@
   return solver_options.IsValid(error);
 }
 
-GradientProblemSolver::~GradientProblemSolver() {}
+GradientProblemSolver::~GradientProblemSolver() = default;
 
 void GradientProblemSolver::Solve(const GradientProblemSolver::Options& options,
                                   const GradientProblem& problem,
diff --git a/internal/ceres/gradient_problem_solver_test.cc b/internal/ceres/gradient_problem_solver_test.cc
index 6d014df..e3b4085 100644
--- a/internal/ceres/gradient_problem_solver_test.cc
+++ b/internal/ceres/gradient_problem_solver_test.cc
@@ -39,7 +39,7 @@
 // Rosenbrock function; see http://en.wikipedia.org/wiki/Rosenbrock_function .
 class Rosenbrock : public ceres::FirstOrderFunction {
  public:
-  ~Rosenbrock() override {}
+  ~Rosenbrock() override = default;
 
   bool Evaluate(const double* parameters,
                 double* cost,
@@ -73,7 +73,7 @@
 }
 
 class QuadraticFunction : public ceres::FirstOrderFunction {
-  ~QuadraticFunction() override {}
+  ~QuadraticFunction() override = default;
   bool Evaluate(const double* parameters,
                 double* cost,
                 double* gradient) const final {
@@ -90,7 +90,7 @@
 
 struct RememberingCallback : public IterationCallback {
   explicit RememberingCallback(double* x) : calls(0), x(x) {}
-  ~RememberingCallback() override {}
+  ~RememberingCallback() override = default;
   CallbackReturnType operator()(const IterationSummary& summary) final {
     x_values.push_back(*x);
     return SOLVER_CONTINUE;
diff --git a/internal/ceres/graph.h b/internal/ceres/graph.h
index 9b26158..ef65453 100644
--- a/internal/ceres/graph.h
+++ b/internal/ceres/graph.h
@@ -49,7 +49,7 @@
 template <typename Vertex>
 class Graph {
  public:
-  Graph() {}
+  Graph() = default;
 
   // Add a vertex.
   void AddVertex(const Vertex& vertex) {
@@ -106,7 +106,7 @@
 template <typename Vertex>
 class WeightedGraph {
  public:
-  WeightedGraph() {}
+  WeightedGraph() = default;
 
   // Add a weighted vertex. If the vertex already exists in the graph,
   // its weight is set to the new weight.
diff --git a/internal/ceres/implicit_schur_complement.cc b/internal/ceres/implicit_schur_complement.cc
index f2196d4..bb2da17 100644
--- a/internal/ceres/implicit_schur_complement.cc
+++ b/internal/ceres/implicit_schur_complement.cc
@@ -45,7 +45,7 @@
     const LinearSolver::Options& options)
     : options_(options), D_(NULL), b_(NULL) {}
 
-ImplicitSchurComplement::~ImplicitSchurComplement() {}
+ImplicitSchurComplement::~ImplicitSchurComplement() = default;
 
 void ImplicitSchurComplement::Init(const BlockSparseMatrix& A,
                                    const double* D,
diff --git a/internal/ceres/iterative_refiner.cc b/internal/ceres/iterative_refiner.cc
index 5f0bfdd..1815469 100644
--- a/internal/ceres/iterative_refiner.cc
+++ b/internal/ceres/iterative_refiner.cc
@@ -42,7 +42,7 @@
 IterativeRefiner::IterativeRefiner(const int max_num_iterations)
     : max_num_iterations_(max_num_iterations) {}
 
-IterativeRefiner::~IterativeRefiner() {}
+IterativeRefiner::~IterativeRefiner() = default;
 
 void IterativeRefiner::Allocate(int num_cols) {
   residual_.resize(num_cols);
diff --git a/internal/ceres/iterative_refiner_test.cc b/internal/ceres/iterative_refiner_test.cc
index 2591375..d3ec9a2 100644
--- a/internal/ceres/iterative_refiner_test.cc
+++ b/internal/ceres/iterative_refiner_test.cc
@@ -54,7 +54,7 @@
 class FakeSparseMatrix : public SparseMatrix {
  public:
   FakeSparseMatrix(const Matrix& m) : m_(m) {}
-  ~FakeSparseMatrix() override {}
+  ~FakeSparseMatrix() override = default;
 
   // y += Ax
   void RightMultiply(const double* x, double* y) const final {
@@ -90,7 +90,7 @@
 class FakeSparseCholesky : public SparseCholesky {
  public:
   FakeSparseCholesky(const Matrix& lhs) { lhs_ = lhs.cast<Scalar>(); }
-  ~FakeSparseCholesky() override {}
+  ~FakeSparseCholesky() override = default;
 
   LinearSolverTerminationType Solve(const double* rhs_ptr,
                                     double* solution_ptr,
diff --git a/internal/ceres/iterative_schur_complement_solver.cc b/internal/ceres/iterative_schur_complement_solver.cc
index 143df5e..e6340df 100644
--- a/internal/ceres/iterative_schur_complement_solver.cc
+++ b/internal/ceres/iterative_schur_complement_solver.cc
@@ -57,7 +57,7 @@
     const LinearSolver::Options& options)
     : options_(options) {}
 
-IterativeSchurComplementSolver::~IterativeSchurComplementSolver() {}
+IterativeSchurComplementSolver::~IterativeSchurComplementSolver() = default;
 
 LinearSolver::Summary IterativeSchurComplementSolver::SolveImpl(
     BlockSparseMatrix* A,
diff --git a/internal/ceres/levenberg_marquardt_strategy.cc b/internal/ceres/levenberg_marquardt_strategy.cc
index cb0e937..2445f5b 100644
--- a/internal/ceres/levenberg_marquardt_strategy.cc
+++ b/internal/ceres/levenberg_marquardt_strategy.cc
@@ -61,7 +61,7 @@
   CHECK_GT(max_radius_, 0.0);
 }
 
-LevenbergMarquardtStrategy::~LevenbergMarquardtStrategy() {}
+LevenbergMarquardtStrategy::~LevenbergMarquardtStrategy() = default;
 
 TrustRegionStrategy::Summary LevenbergMarquardtStrategy::ComputeStep(
     const TrustRegionStrategy::PerSolveOptions& per_solve_options,
diff --git a/internal/ceres/levenberg_marquardt_strategy_test.cc b/internal/ceres/levenberg_marquardt_strategy_test.cc
index c1b88ce..c05dad1 100644
--- a/internal/ceres/levenberg_marquardt_strategy_test.cc
+++ b/internal/ceres/levenberg_marquardt_strategy_test.cc
@@ -58,7 +58,7 @@
   RegularizationCheckingLinearSolver(const int num_cols, const double* diagonal)
       : num_cols_(num_cols), diagonal_(diagonal) {}
 
-  ~RegularizationCheckingLinearSolver() override {}
+  ~RegularizationCheckingLinearSolver() override = default;
 
  private:
   LinearSolver::Summary SolveImpl(
diff --git a/internal/ceres/line_search.h b/internal/ceres/line_search.h
index 124cedb..0af4884 100644
--- a/internal/ceres/line_search.h
+++ b/internal/ceres/line_search.h
@@ -161,7 +161,7 @@
   };
 
   explicit LineSearch(const LineSearch::Options& options);
-  virtual ~LineSearch() {}
+  virtual ~LineSearch() = default;
 
   static LineSearch* Create(const LineSearchType line_search_type,
                             const LineSearch::Options& options,
@@ -260,7 +260,7 @@
 class ArmijoLineSearch : public LineSearch {
  public:
   explicit ArmijoLineSearch(const LineSearch::Options& options);
-  ~ArmijoLineSearch() override {}
+  ~ArmijoLineSearch() override = default;
 
  private:
   void DoSearch(double step_size_estimate,
@@ -279,7 +279,7 @@
 class WolfeLineSearch : public LineSearch {
  public:
   explicit WolfeLineSearch(const LineSearch::Options& options);
-  ~WolfeLineSearch() override {}
+  ~WolfeLineSearch() override = default;
 
   // Returns true iff either a valid point, or valid bracket are found.
   bool BracketingPhase(const FunctionSample& initial_position,
diff --git a/internal/ceres/line_search_direction.cc b/internal/ceres/line_search_direction.cc
index 12c83c8..2b707fb 100644
--- a/internal/ceres/line_search_direction.cc
+++ b/internal/ceres/line_search_direction.cc
@@ -40,7 +40,7 @@
 
 class SteepestDescent : public LineSearchDirection {
  public:
-  ~SteepestDescent() override {}
+  ~SteepestDescent() override = default;
   bool NextDirection(const LineSearchMinimizer::State& previous,
                      const LineSearchMinimizer::State& current,
                      Vector* search_direction) override {
@@ -105,7 +105,7 @@
                                   use_approximate_eigenvalue_bfgs_scaling),
         is_positive_definite_(true) {}
 
-  ~LBFGS() override {}
+  ~LBFGS() override = default;
 
   bool NextDirection(const LineSearchMinimizer::State& previous,
                      const LineSearchMinimizer::State& current,
@@ -161,7 +161,7 @@
     inverse_hessian_ = Matrix::Identity(num_parameters, num_parameters);
   }
 
-  ~BFGS() override {}
+  ~BFGS() override = default;
 
   bool NextDirection(const LineSearchMinimizer::State& previous,
                      const LineSearchMinimizer::State& current,
diff --git a/internal/ceres/line_search_direction.h b/internal/ceres/line_search_direction.h
index 2fcf472..e8b1139 100644
--- a/internal/ceres/line_search_direction.h
+++ b/internal/ceres/line_search_direction.h
@@ -59,7 +59,7 @@
 
   static LineSearchDirection* Create(const Options& options);
 
-  virtual ~LineSearchDirection() {}
+  virtual ~LineSearchDirection() = default;
   virtual bool NextDirection(const LineSearchMinimizer::State& previous,
                              const LineSearchMinimizer::State& current,
                              Vector* search_direction) = 0;
diff --git a/internal/ceres/line_search_minimizer.h b/internal/ceres/line_search_minimizer.h
index 802b542..ae4670a 100644
--- a/internal/ceres/line_search_minimizer.h
+++ b/internal/ceres/line_search_minimizer.h
@@ -63,7 +63,7 @@
     double step_size;
   };
 
-  ~LineSearchMinimizer() override {}
+  ~LineSearchMinimizer() override = default;
   void Minimize(const Minimizer::Options& options,
                 double* parameters,
                 Solver::Summary* summary) final;
diff --git a/internal/ceres/line_search_preprocessor.cc b/internal/ceres/line_search_preprocessor.cc
index 6a69425..465d9a4 100644
--- a/internal/ceres/line_search_preprocessor.cc
+++ b/internal/ceres/line_search_preprocessor.cc
@@ -70,7 +70,7 @@
 
 }  // namespace
 
-LineSearchPreprocessor::~LineSearchPreprocessor() {}
+LineSearchPreprocessor::~LineSearchPreprocessor() = default;
 
 bool LineSearchPreprocessor::Preprocess(const Solver::Options& options,
                                         ProblemImpl* problem,
diff --git a/internal/ceres/linear_operator.cc b/internal/ceres/linear_operator.cc
index 548c724..88b7cc7 100644
--- a/internal/ceres/linear_operator.cc
+++ b/internal/ceres/linear_operator.cc
@@ -33,7 +33,7 @@
 namespace ceres {
 namespace internal {
 
-LinearOperator::~LinearOperator() {}
+LinearOperator::~LinearOperator() = default;
 
 }  // namespace internal
 }  // namespace ceres
diff --git a/internal/ceres/linear_solver.cc b/internal/ceres/linear_solver.cc
index 6cae248..befaa14 100644
--- a/internal/ceres/linear_solver.cc
+++ b/internal/ceres/linear_solver.cc
@@ -43,7 +43,7 @@
 namespace ceres {
 namespace internal {
 
-LinearSolver::~LinearSolver() {}
+LinearSolver::~LinearSolver() = default;
 
 LinearSolverType LinearSolver::LinearSolverForZeroEBlocks(
     LinearSolverType linear_solver_type) {
diff --git a/internal/ceres/linear_solver.h b/internal/ceres/linear_solver.h
index 93aee39..f4616cd 100644
--- a/internal/ceres/linear_solver.h
+++ b/internal/ceres/linear_solver.h
@@ -301,7 +301,7 @@
 template <typename MatrixType>
 class TypedLinearSolver : public LinearSolver {
  public:
-  ~TypedLinearSolver() override {}
+  ~TypedLinearSolver() override = default;
   LinearSolver::Summary Solve(
       LinearOperator* A,
       const double* b,
diff --git a/internal/ceres/local_parameterization.cc b/internal/ceres/local_parameterization.cc
index 62947f0..33e2aa0 100644
--- a/internal/ceres/local_parameterization.cc
+++ b/internal/ceres/local_parameterization.cc
@@ -43,7 +43,7 @@
 
 using std::vector;
 
-LocalParameterization::~LocalParameterization() {}
+LocalParameterization::~LocalParameterization() = default;
 
 bool LocalParameterization::MultiplyByJacobian(const double* x,
                                                const int num_rows,
diff --git a/internal/ceres/low_rank_inverse_hessian.h b/internal/ceres/low_rank_inverse_hessian.h
index 3fabb0c..a7a572c 100644
--- a/internal/ceres/low_rank_inverse_hessian.h
+++ b/internal/ceres/low_rank_inverse_hessian.h
@@ -73,7 +73,7 @@
   LowRankInverseHessian(int num_parameters,
                         int max_num_corrections,
                         bool use_approximate_eigenvalue_scaling);
-  ~LowRankInverseHessian() override {}
+  ~LowRankInverseHessian() override = default;
 
   // Update the low rank approximation. delta_x is the change in the
   // domain of Hessian, and delta_gradient is the change in the
diff --git a/internal/ceres/manifold_adapter.h b/internal/ceres/manifold_adapter.h
index 153dd97..2efec3a 100644
--- a/internal/ceres/manifold_adapter.h
+++ b/internal/ceres/manifold_adapter.h
@@ -15,7 +15,7 @@
     CHECK(local_parameterization != nullptr);
   }
 
-  ~ManifoldAdapter() override {}
+  ~ManifoldAdapter() override = default;
 
   bool Plus(const double* x,
             const double* delta,
diff --git a/internal/ceres/miniglog/glog/logging.h b/internal/ceres/miniglog/glog/logging.h
index 303cd8e..34f26a5 100644
--- a/internal/ceres/miniglog/glog/logging.h
+++ b/internal/ceres/miniglog/glog/logging.h
@@ -138,7 +138,7 @@
 // This implementation is not thread safe.
 class CERES_EXPORT LogSink {
  public:
-  virtual ~LogSink() {}
+  virtual ~LogSink() = default;
   virtual void send(LogSeverity severity,
                     const char* full_filename,
                     const char* base_filename,
@@ -294,7 +294,7 @@
 // is not used" and "statement has no effect".
 class CERES_EXPORT LoggerVoidify {
  public:
-  LoggerVoidify() {}
+  LoggerVoidify() = default;
   // This has to be an operator with a precedence lower than << but
   // higher than ?:
   void operator&(const std::ostream& s) {}
diff --git a/internal/ceres/minimizer.cc b/internal/ceres/minimizer.cc
index b96e0c9..8e27c7b 100644
--- a/internal/ceres/minimizer.cc
+++ b/internal/ceres/minimizer.cc
@@ -51,7 +51,7 @@
   return NULL;
 }
 
-Minimizer::~Minimizer() {}
+Minimizer::~Minimizer() = default;
 
 bool Minimizer::RunCallbacks(const Minimizer::Options& options,
                              const IterationSummary& iteration_summary,
diff --git a/internal/ceres/minimizer_test.cc b/internal/ceres/minimizer_test.cc
index 22b3a19..909beab 100644
--- a/internal/ceres/minimizer_test.cc
+++ b/internal/ceres/minimizer_test.cc
@@ -39,7 +39,7 @@
 
 class FakeIterationCallback : public IterationCallback {
  public:
-  ~FakeIterationCallback() override {}
+  ~FakeIterationCallback() override = default;
   CallbackReturnType operator()(const IterationSummary& summary) final {
     return SOLVER_CONTINUE;
   }
@@ -62,7 +62,7 @@
 
 class AbortingIterationCallback : public IterationCallback {
  public:
-  ~AbortingIterationCallback() override {}
+  ~AbortingIterationCallback() override = default;
   CallbackReturnType operator()(const IterationSummary& summary) final {
     return SOLVER_ABORT;
   }
@@ -80,7 +80,7 @@
 
 class SucceedingIterationCallback : public IterationCallback {
  public:
-  ~SucceedingIterationCallback() override {}
+  ~SucceedingIterationCallback() override = default;
   CallbackReturnType operator()(const IterationSummary& summary) final {
     return SOLVER_TERMINATE_SUCCESSFULLY;
   }
diff --git a/internal/ceres/parameter_block_test.cc b/internal/ceres/parameter_block_test.cc
index f7923b3..e0da433 100644
--- a/internal/ceres/parameter_block_test.cc
+++ b/internal/ceres/parameter_block_test.cc
@@ -111,7 +111,7 @@
 
 struct TestManifold : public Manifold {
  public:
-  ~TestManifold() final {}
+  ~TestManifold() final = default;
 
   bool Plus(const double* x,
             const double* delta,
@@ -166,7 +166,7 @@
 class BadManifold : public Manifold {
  public:
   BadManifold() : calls_(0) {}
-  ~BadManifold() final {}
+  ~BadManifold() final = default;
 
   bool Plus(const double* x,
             const double* delta,
diff --git a/internal/ceres/partitioned_matrix_view.h b/internal/ceres/partitioned_matrix_view.h
index b39aa3e..4761050 100644
--- a/internal/ceres/partitioned_matrix_view.h
+++ b/internal/ceres/partitioned_matrix_view.h
@@ -62,7 +62,7 @@
 // wrong output.
 class CERES_EXPORT_INTERNAL PartitionedMatrixViewBase {
  public:
-  virtual ~PartitionedMatrixViewBase() {}
+  virtual ~PartitionedMatrixViewBase() = default;
 
   // y += E'x
   virtual void LeftMultiplyE(const double* x, double* y) const = 0;
diff --git a/internal/ceres/partitioned_matrix_view_impl.h b/internal/ceres/partitioned_matrix_view_impl.h
index 0b6a57f..22594ef 100644
--- a/internal/ceres/partitioned_matrix_view_impl.h
+++ b/internal/ceres/partitioned_matrix_view_impl.h
@@ -82,7 +82,7 @@
 
 template <int kRowBlockSize, int kEBlockSize, int kFBlockSize>
 PartitionedMatrixView<kRowBlockSize, kEBlockSize, kFBlockSize>::
-    ~PartitionedMatrixView() {}
+    ~PartitionedMatrixView() = default;
 
 // The next four methods don't seem to be particularly cache
 // friendly. This is an artifact of how the BlockStructure of the
diff --git a/internal/ceres/preconditioner.cc b/internal/ceres/preconditioner.cc
index 69ba04d..17b9629c 100644
--- a/internal/ceres/preconditioner.cc
+++ b/internal/ceres/preconditioner.cc
@@ -35,7 +35,7 @@
 namespace ceres {
 namespace internal {
 
-Preconditioner::~Preconditioner() {}
+Preconditioner::~Preconditioner() = default;
 
 PreconditionerType Preconditioner::PreconditionerForZeroEBlocks(
     PreconditionerType preconditioner_type) {
@@ -53,7 +53,8 @@
   CHECK(matrix != nullptr);
 }
 
-SparseMatrixPreconditionerWrapper::~SparseMatrixPreconditionerWrapper() {}
+SparseMatrixPreconditionerWrapper::~SparseMatrixPreconditionerWrapper() =
+    default;
 
 bool SparseMatrixPreconditionerWrapper::UpdateImpl(const SparseMatrix& A,
                                                    const double* D) {
diff --git a/internal/ceres/preconditioner.h b/internal/ceres/preconditioner.h
index 331cc9c..6a6bc61 100644
--- a/internal/ceres/preconditioner.h
+++ b/internal/ceres/preconditioner.h
@@ -149,7 +149,7 @@
 template <typename MatrixType>
 class TypedPreconditioner : public Preconditioner {
  public:
-  ~TypedPreconditioner() override {}
+  ~TypedPreconditioner() override = default;
   bool Update(const LinearOperator& A, const double* D) final {
     return UpdateImpl(*down_cast<const MatrixType*>(&A), D);
   }
diff --git a/internal/ceres/preprocessor.cc b/internal/ceres/preprocessor.cc
index cd8c48c..097ac64 100644
--- a/internal/ceres/preprocessor.cc
+++ b/internal/ceres/preprocessor.cc
@@ -54,7 +54,7 @@
   return NULL;
 }
 
-Preprocessor::~Preprocessor() {}
+Preprocessor::~Preprocessor() = default;
 
 void ChangeNumThreadsIfNeeded(Solver::Options* options) {
   if (options->num_threads == 1) {
diff --git a/internal/ceres/problem.cc b/internal/ceres/problem.cc
index e6a7350..5926bce 100644
--- a/internal/ceres/problem.cc
+++ b/internal/ceres/problem.cc
@@ -46,7 +46,7 @@
 // Not inline defaulted in declaration due to use of std::unique_ptr.
 Problem::Problem(Problem&&) = default;
 Problem& Problem::operator=(Problem&&) = default;
-Problem::~Problem() {}
+Problem::~Problem() = default;
 
 ResidualBlockId Problem::AddResidualBlock(
     CostFunction* cost_function,
diff --git a/internal/ceres/problem_test.cc b/internal/ceres/problem_test.cc
index d2ccf63..483ae07 100644
--- a/internal/ceres/problem_test.cc
+++ b/internal/ceres/problem_test.cc
@@ -67,7 +67,7 @@
     mutable_parameter_block_sizes()->push_back(parameter_block_size);
   }
 
-  ~UnaryCostFunction() override {}
+  ~UnaryCostFunction() override = default;
 
   bool Evaluate(double const* const* parameters,
                 double* residuals,
diff --git a/internal/ceres/program.cc b/internal/ceres/program.cc
index 5fba205..516d58d 100644
--- a/internal/ceres/program.cc
+++ b/internal/ceres/program.cc
@@ -54,12 +54,11 @@
 namespace ceres {
 namespace internal {
 
-Program::Program() {}
+Program::Program() = default;
 
 Program::Program(const Program& program)
-    : parameter_blocks_(program.parameter_blocks_),
-      residual_blocks_(program.residual_blocks_),
-      evaluation_callback_(program.evaluation_callback_) {}
+
+    = default;
 
 const std::vector<ParameterBlock*>& Program::parameter_blocks() const {
   return parameter_blocks_;
diff --git a/internal/ceres/program_test.cc b/internal/ceres/program_test.cc
index 7fdf300..d12cfa5 100644
--- a/internal/ceres/program_test.cc
+++ b/internal/ceres/program_test.cc
@@ -331,7 +331,7 @@
     }
   }
 
-  ~NumParameterBlocksCostFunction() override {}
+  ~NumParameterBlocksCostFunction() override = default;
 
   bool Evaluate(double const* const* parameters,
                 double* residuals,
diff --git a/internal/ceres/schur_complement_solver.cc b/internal/ceres/schur_complement_solver.cc
index cd62f40..57419c2 100644
--- a/internal/ceres/schur_complement_solver.cc
+++ b/internal/ceres/schur_complement_solver.cc
@@ -68,7 +68,7 @@
       const BlockRandomAccessSparseMatrix& m)
       : m_(m) {}
 
-  ~BlockRandomAccessSparseMatrixAdapter() override {}
+  ~BlockRandomAccessSparseMatrixAdapter() override = default;
 
   // y = y + Ax;
   void RightMultiply(const double* x, double* y) const final {
@@ -93,7 +93,7 @@
       const BlockRandomAccessDiagonalMatrix& m)
       : m_(m) {}
 
-  ~BlockRandomAccessDiagonalMatrixAdapter() override {}
+  ~BlockRandomAccessDiagonalMatrixAdapter() override = default;
 
   // y = y + Ax;
   void RightMultiply(const double* x, double* y) const final {
@@ -122,7 +122,7 @@
   CHECK(options.context != nullptr);
 }
 
-SchurComplementSolver::~SchurComplementSolver() {}
+SchurComplementSolver::~SchurComplementSolver() = default;
 
 LinearSolver::Summary SchurComplementSolver::SolveImpl(
     BlockSparseMatrix* A,
@@ -188,7 +188,7 @@
     : SchurComplementSolver(options),
       cholesky_(DenseCholesky::Create(options)) {}
 
-DenseSchurComplementSolver::~DenseSchurComplementSolver() {}
+DenseSchurComplementSolver::~DenseSchurComplementSolver() = default;
 
 // Initialize a BlockRandomAccessDenseMatrix to store the Schur
 // complement.
@@ -240,7 +240,7 @@
   }
 }
 
-SparseSchurComplementSolver::~SparseSchurComplementSolver() {}
+SparseSchurComplementSolver::~SparseSchurComplementSolver() = default;
 
 // Determine the non-zero blocks in the Schur Complement matrix, and
 // initialize a BlockRandomAccessSparseMatrix object.
diff --git a/internal/ceres/schur_eliminator.h b/internal/ceres/schur_eliminator.h
index 2fb59d4..a9eada5 100644
--- a/internal/ceres/schur_eliminator.h
+++ b/internal/ceres/schur_eliminator.h
@@ -165,7 +165,7 @@
 // Example usage: Please see schur_complement_solver.cc
 class CERES_EXPORT_INTERNAL SchurEliminatorBase {
  public:
-  virtual ~SchurEliminatorBase() {}
+  virtual ~SchurEliminatorBase() = default;
 
   // Initialize the eliminator. It is the user's responsibilty to call
   // this function before calling Eliminate or BackSubstitute. It is
@@ -379,7 +379,7 @@
           int kFBlockSize = Eigen::Dynamic>
 class SchurEliminatorForOneFBlock : public SchurEliminatorBase {
  public:
-  ~SchurEliminatorForOneFBlock() override {}
+  ~SchurEliminatorForOneFBlock() override = default;
   void Init(int num_eliminate_blocks,
             bool assume_full_rank_ete,
             const CompressedRowBlockStructure* bs) override {
diff --git a/internal/ceres/schur_jacobi_preconditioner.cc b/internal/ceres/schur_jacobi_preconditioner.cc
index 89d770b..283cd4b 100644
--- a/internal/ceres/schur_jacobi_preconditioner.cc
+++ b/internal/ceres/schur_jacobi_preconditioner.cc
@@ -62,7 +62,7 @@
   InitEliminator(bs);
 }
 
-SchurJacobiPreconditioner::~SchurJacobiPreconditioner() {}
+SchurJacobiPreconditioner::~SchurJacobiPreconditioner() = default;
 
 // Initialize the SchurEliminator.
 void SchurJacobiPreconditioner::InitEliminator(
diff --git a/internal/ceres/solver.cc b/internal/ceres/solver.cc
index dfde122..491f066 100644
--- a/internal/ceres/solver.cc
+++ b/internal/ceres/solver.cc
@@ -485,7 +485,7 @@
   return LineSearchOptionsAreValid(*this, error);
 }
 
-Solver::~Solver() {}
+Solver::~Solver() = default;
 
 void Solver::Solve(const Solver::Options& options,
                    Problem* problem,
diff --git a/internal/ceres/solver_test.cc b/internal/ceres/solver_test.cc
index 465262c..41f3872 100644
--- a/internal/ceres/solver_test.cc
+++ b/internal/ceres/solver_test.cc
@@ -78,7 +78,7 @@
 
 struct RememberingCallback : public IterationCallback {
   explicit RememberingCallback(double* x) : calls(0), x(x) {}
-  ~RememberingCallback() override {}
+  ~RememberingCallback() override = default;
   CallbackReturnType operator()(const IterationSummary& summary) final {
     x_values.push_back(*x);
     return SOLVER_CONTINUE;
@@ -89,7 +89,7 @@
 };
 
 struct NoOpEvaluationCallback : EvaluationCallback {
-  ~NoOpEvaluationCallback() override {}
+  ~NoOpEvaluationCallback() override = default;
   void PrepareForEvaluation(bool evaluate_jacobians,
                             bool new_evaluation_point) final {
     (void)evaluate_jacobians;
diff --git a/internal/ceres/sparse_cholesky.cc b/internal/ceres/sparse_cholesky.cc
index 91cdf67..c71d2fe 100644
--- a/internal/ceres/sparse_cholesky.cc
+++ b/internal/ceres/sparse_cholesky.cc
@@ -113,7 +113,7 @@
   return sparse_cholesky;
 }
 
-SparseCholesky::~SparseCholesky() {}
+SparseCholesky::~SparseCholesky() = default;
 
 LinearSolverTerminationType SparseCholesky::FactorAndSolve(
     CompressedRowSparseMatrix* lhs,
@@ -133,7 +133,7 @@
     : sparse_cholesky_(std::move(sparse_cholesky)),
       iterative_refiner_(std::move(iterative_refiner)) {}
 
-RefinedSparseCholesky::~RefinedSparseCholesky() {}
+RefinedSparseCholesky::~RefinedSparseCholesky() = default;
 
 CompressedRowSparseMatrix::StorageType RefinedSparseCholesky::StorageType()
     const {
diff --git a/internal/ceres/sparse_matrix.cc b/internal/ceres/sparse_matrix.cc
index 32388f5..bc757ea 100644
--- a/internal/ceres/sparse_matrix.cc
+++ b/internal/ceres/sparse_matrix.cc
@@ -33,7 +33,7 @@
 namespace ceres {
 namespace internal {
 
-SparseMatrix::~SparseMatrix() {}
+SparseMatrix::~SparseMatrix() = default;
 
 }  // namespace internal
 }  // namespace ceres
diff --git a/internal/ceres/sparse_normal_cholesky_solver.cc b/internal/ceres/sparse_normal_cholesky_solver.cc
index 0f2e589..1ffce8f 100644
--- a/internal/ceres/sparse_normal_cholesky_solver.cc
+++ b/internal/ceres/sparse_normal_cholesky_solver.cc
@@ -54,7 +54,7 @@
   sparse_cholesky_ = SparseCholesky::Create(options);
 }
 
-SparseNormalCholeskySolver::~SparseNormalCholeskySolver() {}
+SparseNormalCholeskySolver::~SparseNormalCholeskySolver() = default;
 
 LinearSolver::Summary SparseNormalCholeskySolver::SolveImpl(
     BlockSparseMatrix* A,
diff --git a/internal/ceres/subset_preconditioner.cc b/internal/ceres/subset_preconditioner.cc
index 779a34a..e5146ce 100644
--- a/internal/ceres/subset_preconditioner.cc
+++ b/internal/ceres/subset_preconditioner.cc
@@ -55,7 +55,7 @@
   sparse_cholesky_ = SparseCholesky::Create(sparse_cholesky_options);
 }
 
-SubsetPreconditioner::~SubsetPreconditioner() {}
+SubsetPreconditioner::~SubsetPreconditioner() = default;
 
 void SubsetPreconditioner::RightMultiply(const double* x, double* y) const {
   CHECK(x != nullptr);
diff --git a/internal/ceres/thread_pool.cc b/internal/ceres/thread_pool.cc
index 821431c..69753df 100644
--- a/internal/ceres/thread_pool.cc
+++ b/internal/ceres/thread_pool.cc
@@ -57,7 +57,7 @@
                                    : num_hardware_threads;
 }
 
-ThreadPool::ThreadPool() {}
+ThreadPool::ThreadPool() = default;
 
 ThreadPool::ThreadPool(int num_threads) { Resize(num_threads); }
 
diff --git a/internal/ceres/triplet_sparse_matrix.cc b/internal/ceres/triplet_sparse_matrix.cc
index 5dbf0e7..e4f7f9b 100644
--- a/internal/ceres/triplet_sparse_matrix.cc
+++ b/internal/ceres/triplet_sparse_matrix.cc
@@ -45,7 +45,7 @@
 TripletSparseMatrix::TripletSparseMatrix()
     : num_rows_(0), num_cols_(0), max_num_nonzeros_(0), num_nonzeros_(0) {}
 
-TripletSparseMatrix::~TripletSparseMatrix() {}
+TripletSparseMatrix::~TripletSparseMatrix() = default;
 
 TripletSparseMatrix::TripletSparseMatrix(int num_rows,
                                          int num_cols,
diff --git a/internal/ceres/trust_region_minimizer.cc b/internal/ceres/trust_region_minimizer.cc
index d848795..5e292bb 100644
--- a/internal/ceres/trust_region_minimizer.cc
+++ b/internal/ceres/trust_region_minimizer.cc
@@ -62,7 +62,7 @@
 namespace ceres {
 namespace internal {
 
-TrustRegionMinimizer::~TrustRegionMinimizer() {}
+TrustRegionMinimizer::~TrustRegionMinimizer() = default;
 
 void TrustRegionMinimizer::Minimize(const Minimizer::Options& options,
                                     double* parameters,
diff --git a/internal/ceres/trust_region_minimizer_test.cc b/internal/ceres/trust_region_minimizer_test.cc
index 3181068..7f2c931 100644
--- a/internal/ceres/trust_region_minimizer_test.cc
+++ b/internal/ceres/trust_region_minimizer_test.cc
@@ -76,7 +76,7 @@
   }
   // clang-format on
 
-  ~PowellEvaluator2() override {}
+  ~PowellEvaluator2() override = default;
 
   // Implementation of Evaluator interface.
   SparseMatrix* CreateJacobian() const final {
diff --git a/internal/ceres/trust_region_preprocessor.cc b/internal/ceres/trust_region_preprocessor.cc
index 0943edb..fc76369 100644
--- a/internal/ceres/trust_region_preprocessor.cc
+++ b/internal/ceres/trust_region_preprocessor.cc
@@ -355,7 +355,7 @@
 
 }  // namespace
 
-TrustRegionPreprocessor::~TrustRegionPreprocessor() {}
+TrustRegionPreprocessor::~TrustRegionPreprocessor() = default;
 
 bool TrustRegionPreprocessor::Preprocess(const Solver::Options& options,
                                          ProblemImpl* problem,
diff --git a/internal/ceres/trust_region_strategy.cc b/internal/ceres/trust_region_strategy.cc
index 7e429d5..235bf98 100644
--- a/internal/ceres/trust_region_strategy.cc
+++ b/internal/ceres/trust_region_strategy.cc
@@ -38,7 +38,7 @@
 namespace ceres {
 namespace internal {
 
-TrustRegionStrategy::~TrustRegionStrategy() {}
+TrustRegionStrategy::~TrustRegionStrategy() = default;
 
 TrustRegionStrategy* TrustRegionStrategy::Create(const Options& options) {
   switch (options.trust_region_strategy_type) {
diff --git a/internal/ceres/visibility_based_preconditioner.cc b/internal/ceres/visibility_based_preconditioner.cc
index 0cf4afa..566dcfa 100644
--- a/internal/ceres/visibility_based_preconditioner.cc
+++ b/internal/ceres/visibility_based_preconditioner.cc
@@ -125,7 +125,7 @@
           << " eliminator time: " << eliminator_time - storage_time;
 }
 
-VisibilityBasedPreconditioner::~VisibilityBasedPreconditioner() {}
+VisibilityBasedPreconditioner::~VisibilityBasedPreconditioner() = default;
 
 // Determine the sparsity structure of the CLUSTER_JACOBI
 // preconditioner. It clusters cameras using their scene
