Make Problem movable.
Add a default move constructor and move assignment operator.
https://github.com/ceres-solver/ceres-solver/issues/528
Change-Id: I16ecf367a800fde564c29e2b824cd4fb44111366
diff --git a/include/ceres/problem.h b/include/ceres/problem.h
index 278d80f..a4a6c8f 100644
--- a/include/ceres/problem.h
+++ b/include/ceres/problem.h
@@ -189,8 +189,11 @@
// invocation Problem(Problem::Options()).
Problem();
explicit Problem(const Options& options);
+ Problem(Problem&&) = default;
+ Problem& operator=(Problem&&) = default;
+
Problem(const Problem&) = delete;
- void operator=(const Problem&) = delete;
+ Problem& operator=(const Problem&) = delete;
~Problem();
diff --git a/internal/ceres/problem_test.cc b/internal/ceres/problem_test.cc
index 038600c..b779524 100644
--- a/internal/ceres/problem_test.cc
+++ b/internal/ceres/problem_test.cc
@@ -122,6 +122,24 @@
}
};
+
+TEST(Problem, MoveConstructor) {
+ Problem src;
+ double x;
+ src.AddParameterBlock(&x, 1);
+ Problem dst(std::move(src));
+ EXPECT_TRUE(dst.HasParameterBlock(&x));
+}
+
+TEST(Problem, MoveAssignment) {
+ Problem src;
+ double x;
+ src.AddParameterBlock(&x, 1);
+ Problem dst;
+ dst = std::move(src);
+ EXPECT_TRUE(dst.HasParameterBlock(&x));
+}
+
TEST(Problem, AddResidualWithNullCostFunctionDies) {
double x[3], y[4], z[5];