Revert C++17 usage of std::exclusive_scan
* Unfortunately on some systems such as the Nvidia Jetson, while the
compiler supports C++17, the STL implementations are incomplete.
One such missing implementation is std::exclusive_scan, so this
patch reverts to the old way of manually computing prefix sums.
Change-Id: I4192257519b0083560a4b44e2659ee44d7421105
diff --git a/include/ceres/product_manifold.h b/include/ceres/product_manifold.h
index 856c453..1666fac 100644
--- a/include/ceres/product_manifold.h
+++ b/include/ceres/product_manifold.h
@@ -257,7 +257,13 @@
template <typename T, std::size_t N>
static std::array<T, N> ExclusiveScan(const std::array<T, N>& values) {
std::array<T, N> result;
- std::exclusive_scan(values.begin(), values.end(), result.begin(), 0);
+ // TODO Replace with std::exclusive_scan once all platforms have full C++17
+ // STL support.
+ T init = 0;
+ for (std::size_t i = 0; i != N; ++i) {
+ result[i] = init;
+ init += values[i];
+ }
return result;
}