diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt
index f185d19..3d86be8 100644
--- a/examples/CMakeLists.txt
+++ b/examples/CMakeLists.txt
@@ -72,18 +72,6 @@
 add_executable(simple_bundle_adjuster simple_bundle_adjuster.cc)
 target_link_libraries(simple_bundle_adjuster ceres)
 
-if(CODE_GENERATION)
-  include(CeresCodeGeneration)
-  ceres_generate_cost_function_implementation_for_functor(
-    NAME HelloWorldCostFunction
-    INPUT_FILE helloworld_cost_function.h
-    OUTPUT_DIRECTORY examples
-    NAMESPACE helloworld
-    )
-  add_executable(helloworld_codegen helloworld_codegen.cc )
-  target_link_libraries(helloworld_codegen ceres HelloWorldCostFunction)
-endif(CODE_GENERATION)
-
 if (GFLAGS)
   add_executable(powell powell.cc)
   target_link_libraries(powell ceres ${GFLAGS_LIBRARIES})
diff --git a/examples/helloworld_codegen.cc b/examples/helloworld_codegen.cc
deleted file mode 100644
index 6aa0792..0000000
--- a/examples/helloworld_codegen.cc
+++ /dev/null
@@ -1,65 +0,0 @@
-// Ceres Solver - A fast non-linear least squares minimizer
-// Copyright 2019 Google Inc. All rights reserved.
-// http://code.google.com/p/ceres-solver/
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are met:
-//
-// * Redistributions of source code must retain the above copyright notice,
-//   this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright notice,
-//   this list of conditions and the following disclaimer in the documentation
-//   and/or other materials provided with the distribution.
-// * Neither the name of Google Inc. nor the names of its contributors may be
-//   used to endorse or promote products derived from this software without
-//   specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-// POSSIBILITY OF SUCH DAMAGE.
-//
-// Author: darius.rueckert@fau.de (Darius Rueckert)
-//
-// A simple example showing how to generate code for a cost functor
-
-#include "ceres/ceres.h"
-#include "glog/logging.h"
-#include "helloworld_cost_function.h"
-
-using ceres::CostFunction;
-using ceres::Problem;
-using ceres::Solve;
-using ceres::Solver;
-
-int main(int argc, char** argv) {
-  google::InitGoogleLogging(argv[0]);
-
-  // The variable to solve for with its initial value. It will be
-  // mutated in place by the solver.
-  double x = 0.5;
-  const double initial_x = x;
-
-  Problem problem;
-
-  const double kTargetValue = 10.0;
-  CostFunction* cost_function =
-      new helloworld::HelloWorldCostFunction(kTargetValue);
-  problem.AddResidualBlock(cost_function, NULL, &x);
-
-  Solver::Options options;
-  options.minimizer_progress_to_stdout = true;
-  Solver::Summary summary;
-  Solve(options, &problem, &summary);
-
-  std::cout << summary.BriefReport() << "\n";
-  std::cout << "x : " << initial_x << " -> " << x << "\n";
-  return 0;
-}
diff --git a/examples/helloworld_cost_function.h b/examples/helloworld_cost_function.h
deleted file mode 100644
index 764d6c7..0000000
--- a/examples/helloworld_cost_function.h
+++ /dev/null
@@ -1,56 +0,0 @@
-// Ceres Solver - A fast non-linear least squares minimizer
-// Copyright 2019 Google Inc. All rights reserved.
-// http://code.google.com/p/ceres-solver/
-//
-// Redistribution and use in source and binary forms, with or without
-// modification, are permitted provided that the following conditions are met:
-//
-// * Redistributions of source code must retain the above copyright notice,
-//   this list of conditions and the following disclaimer.
-// * Redistributions in binary form must reproduce the above copyright notice,
-//   this list of conditions and the following disclaimer in the documentation
-//   and/or other materials provided with the distribution.
-// * Neither the name of Google Inc. nor the names of its contributors may be
-//   used to endorse or promote products derived from this software without
-//   specific prior written permission.
-//
-// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-// POSSIBILITY OF SUCH DAMAGE.
-//
-// Author: darius.rueckert@fau.de (Darius Rueckert)
-//
-#include "ceres/codegen/codegen_cost_function.h"
-
-namespace helloworld {
-
-struct HelloWorldCostFunction : public ceres::CodegenCostFunction<1, 1> {
-  // We need a default constructor, because code is generated for the cost
-  // functor and not a specific instantiation of it.
-  HelloWorldCostFunction() = default;
-  explicit HelloWorldCostFunction(double target_value)
-      : target_value_(target_value) {}
-
-  template <typename T>
-  bool operator()(const T* x, T* residual) const {
-    residual[0] = CERES_LOCAL_VARIABLE(T, target_value_) - x[0];
-    return true;
-  }
-
-// The include file name is automatically generated as
-// "<output_dir>/<lower_case_class_name>.h"
-#include "examples/helloworldcostfunction.h"
-
- private:
-  double target_value_;
-};
-
-}  // namespace helloworld
