mirror of
https://github.com/ceres-solver/ceres-solver.git
synced 2026-08-29 08:34:37 +08:00
Update minimum required C++ version for Ceres to C++14
- Removes all workarounds for pre-C++14 versions - Removes '11' qualifier from C++ threading option and associated defines. - Fix missing inclusion of 'Multithreading' in reported Ceres components when C++ threading model is enabled. - Update Sphinx documentation to specify C++14 as minimum requirement. Change-Id: I706c8b367b3221e3c4d1a0aaf669a8f9c911e438
This commit is contained in:
@@ -35,7 +35,7 @@
|
||||
#ifndef CERES_PUBLIC_INTERNAL_INTEGER_SEQUENCE_ALGORITHM_H_
|
||||
#define CERES_PUBLIC_INTERNAL_INTEGER_SEQUENCE_ALGORITHM_H_
|
||||
|
||||
#include "integer_sequence.h"
|
||||
#include <utility>
|
||||
|
||||
namespace ceres {
|
||||
namespace internal {
|
||||
@@ -61,33 +61,33 @@ struct SumImpl;
|
||||
|
||||
// Strip of and sum the first number.
|
||||
template <typename T, T N, T... Ns>
|
||||
struct SumImpl<integer_sequence<T, N, Ns...>> {
|
||||
static constexpr T Value = N + SumImpl<integer_sequence<T, Ns...>>::Value;
|
||||
struct SumImpl<std::integer_sequence<T, N, Ns...>> {
|
||||
static constexpr T Value = N + SumImpl<std::integer_sequence<T, Ns...>>::Value;
|
||||
};
|
||||
|
||||
// Strip of and sum the first two numbers.
|
||||
template <typename T, T N1, T N2, T... Ns>
|
||||
struct SumImpl<integer_sequence<T, N1, N2, Ns...>> {
|
||||
struct SumImpl<std::integer_sequence<T, N1, N2, Ns...>> {
|
||||
static constexpr T Value =
|
||||
N1 + N2 + SumImpl<integer_sequence<T, Ns...>>::Value;
|
||||
N1 + N2 + SumImpl<std::integer_sequence<T, Ns...>>::Value;
|
||||
};
|
||||
|
||||
// Strip of and sum the first four numbers.
|
||||
template <typename T, T N1, T N2, T N3, T N4, T... Ns>
|
||||
struct SumImpl<integer_sequence<T, N1, N2, N3, N4, Ns...>> {
|
||||
struct SumImpl<std::integer_sequence<T, N1, N2, N3, N4, Ns...>> {
|
||||
static constexpr T Value =
|
||||
N1 + N2 + N3 + N4 + SumImpl<integer_sequence<T, Ns...>>::Value;
|
||||
N1 + N2 + N3 + N4 + SumImpl<std::integer_sequence<T, Ns...>>::Value;
|
||||
};
|
||||
|
||||
// Only one number is left. 'Value' is just that number ('recursion' ends).
|
||||
template <typename T, T N>
|
||||
struct SumImpl<integer_sequence<T, N>> {
|
||||
struct SumImpl<std::integer_sequence<T, N>> {
|
||||
static constexpr T Value = N;
|
||||
};
|
||||
|
||||
// No number is left. 'Value' is the identity element (for sum this is zero).
|
||||
template <typename T>
|
||||
struct SumImpl<integer_sequence<T>> {
|
||||
struct SumImpl<std::integer_sequence<T>> {
|
||||
static constexpr T Value = T(0);
|
||||
};
|
||||
|
||||
@@ -129,16 +129,16 @@ template <typename T, T Sum, typename SeqIn, typename SeqOut>
|
||||
struct ExclusiveScanImpl;
|
||||
|
||||
template <typename T, T Sum, T N, T... Ns, T... Rs>
|
||||
struct ExclusiveScanImpl<T, Sum, integer_sequence<T, N, Ns...>,
|
||||
integer_sequence<T, Rs...>> {
|
||||
struct ExclusiveScanImpl<T, Sum, std::integer_sequence<T, N, Ns...>,
|
||||
std::integer_sequence<T, Rs...>> {
|
||||
using Type =
|
||||
typename ExclusiveScanImpl<T, Sum + N, integer_sequence<T, Ns...>,
|
||||
integer_sequence<T, Rs..., Sum>>::Type;
|
||||
typename ExclusiveScanImpl<T, Sum + N, std::integer_sequence<T, Ns...>,
|
||||
std::integer_sequence<T, Rs..., Sum>>::Type;
|
||||
};
|
||||
|
||||
// End of 'recursion'. The resulting type is SeqOut.
|
||||
template <typename T, T Sum, typename SeqOut>
|
||||
struct ExclusiveScanImpl<T, Sum, integer_sequence<T>, SeqOut> {
|
||||
struct ExclusiveScanImpl<T, Sum, std::integer_sequence<T>, SeqOut> {
|
||||
using Type = SeqOut;
|
||||
};
|
||||
|
||||
@@ -152,7 +152,7 @@ class ExclusiveScanT {
|
||||
|
||||
public:
|
||||
using Type =
|
||||
typename ExclusiveScanImpl<T, T(0), Seq, integer_sequence<T>>::Type;
|
||||
typename ExclusiveScanImpl<T, T(0), Seq, std::integer_sequence<T>>::Type;
|
||||
};
|
||||
|
||||
// Helper to use exclusive scan without typename.
|
||||
|
||||
Reference in New Issue
Block a user