diff --git a/optimization/optimizers/conjugate_gradient_descent/conjugate_gradient_descent.h b/optimization/optimizers/conjugate_gradient_descent/conjugate_gradient_descent.h
index 1dcb6b97eaa0811165926a2c1b8c678a113e2e29..9393909896046c26eba5b52c37a1e1bf6f06816d 100644
--- a/optimization/optimizers/conjugate_gradient_descent/conjugate_gradient_descent.h
+++ b/optimization/optimizers/conjugate_gradient_descent/conjugate_gradient_descent.h
@@ -3,7 +3,6 @@
 
 #include "logs/nothing.h"
 #include "optimizers/line_search/brent.h"
-#include "optimizers/line_search/line_objective.h"
 
 #include <iostream>
 
@@ -90,7 +89,10 @@ VectorNs<N> const& ConjugateGradientDescent<N>::optimize(
     gradient_.resize(point_.size());
     last_gradient_.resize(point_.size());
 
-    LineObjective<Objective, N> line_objective{objective, point_, direction_, new_point_};
+    auto const line_objective = [&](Scalar t, Scalar& value) {
+        new_point_ = point_ + t * direction_;
+        objective(new_point_, value);
+    };
     BracketFinder bracket;
     Brent line_minimizer;
 
diff --git a/optimization/optimizers/line_search/line_objective.h b/optimization/optimizers/line_search/line_objective.h
deleted file mode 100644
index 7a7bb55a4054aa2b82f1679797c3bc76f8726c65..0000000000000000000000000000000000000000
--- a/optimization/optimizers/line_search/line_objective.h
+++ /dev/null
@@ -1,35 +0,0 @@
-#ifndef OPTIMIZATION_LINE_SEARCH_LINE_OBJECTIVE_H
-#define OPTIMIZATION_LINE_SEARCH_LINE_OBJECTIVE_H
-
-#include "utils/vector.h"
-
-namespace optimization {
-
-//--------------------------------------------------------------------------------------------------
-template <typename Objective, int32_t N>
-struct LineObjective {
-public:
-    LineObjective(Objective& o, VectorNs<N>& x0, VectorNs<N>& dir, VectorNs<N>& x) :
-        objective_(o), x0_(x0), dir_(dir), x_(x)
-    {}
-
-    void operator()(Scalar t, Scalar& value) {
-        x_ = x0_ + t * dir_;
-        objective_(x_, value);
-    }
-
-    void operator()(Scalar t, Scalar& value, VectorNs<N>& gradient) {
-        x_ = x0_ + t * dir_;
-        objective_(x_, value, gradient);
-    }
-
-private:
-    Objective& objective_;
-    VectorNs<N>& x0_;
-    VectorNs<N>& dir_;
-    VectorNs<N>& x_;
-};
-
-}
-
-#endif