Fix use of incomplete type in defaulted Problem methods - As Problem contains a unique_ptr<ProblemImpl> and as defaulted methods are declared inline where ProblemImpl's implementation is not available use of '= default' will generate compile errors on strict compilers. - This CL moves the definition of defaulted methods to the implementation. Change-Id: I7d79757cf684378fadef8e6f4000c84387018cdb
diff --git a/include/ceres/problem.h b/include/ceres/problem.h index ba9b903..e43616e 100644 --- a/include/ceres/problem.h +++ b/include/ceres/problem.h
@@ -189,8 +189,8 @@ // invocation Problem(Problem::Options()). Problem(); explicit Problem(const Options& options); - Problem(Problem&&) = default; - Problem& operator=(Problem&&) = default; + Problem(Problem&&); + Problem& operator=(Problem&&); Problem(const Problem&) = delete; Problem& operator=(const Problem&) = delete;
diff --git a/internal/ceres/problem.cc b/internal/ceres/problem.cc index f4efa6e..767fe97 100644 --- a/internal/ceres/problem.cc +++ b/internal/ceres/problem.cc
@@ -43,6 +43,9 @@ Problem::Problem() : impl_(new internal::ProblemImpl) {} Problem::Problem(const Problem::Options& options) : impl_(new internal::ProblemImpl(options)) {} +// Not inline defaulted in declaration due to use of std::unique_ptr. +Problem::Problem(Problem&&) = default; +Problem& Problem::operator=(Problem&&) = default; Problem::~Problem() {} ResidualBlockId Problem::AddResidualBlock(