Simplify some template metaprograms using fold expressions.

Change-Id: I865b670b99df30db39d33cbfe45170b70472e532
This commit is contained in:
Sameer Agarwal
2022-04-02 11:00:30 -07:00
parent 3b0096c1bb
commit be618133e7
7 changed files with 23 additions and 199 deletions
@@ -39,20 +39,6 @@
namespace ceres {
namespace internal {
// Unit tests for summation of integer sequence.
static_assert(Sum<std::integer_sequence<int>>::Value == 0,
"Unit test of summing up an integer sequence failed.");
static_assert(Sum<std::integer_sequence<int, 2>>::Value == 2,
"Unit test of summing up an integer sequence failed.");
static_assert(Sum<std::integer_sequence<int, 2, 3>>::Value == 5,
"Unit test of summing up an integer sequence failed.");
static_assert(Sum<std::integer_sequence<int, 2, 3, 10>>::Value == 15,
"Unit test of summing up an integer sequence failed.");
static_assert(Sum<std::integer_sequence<int, 2, 3, 10, 4>>::Value == 19,
"Unit test of summing up an integer sequence failed.");
static_assert(Sum<std::integer_sequence<int, 2, 3, 10, 4, 1>>::Value == 20,
"Unit test of summing up an integer sequence failed.");
// Unit tests for exclusive scan of integer sequence.
static_assert(std::is_same<ExclusiveScan<std::integer_sequence<int>>,
std::integer_sequence<int>>::value,
@@ -129,15 +115,15 @@ static_assert(!AreAllSame_v<double, int>, "types must not be the same");
static_assert(!AreAllSame_v<int, short, char>, "types must not be the same");
// Ensure all values in the integer sequence match
static_assert(AreAllEqual_v<std::integer_sequence<int, 1, 1>>,
static_assert(AreAllEqual_v<int, 1, 1>,
"integer sequence must contain same values");
static_assert(AreAllEqual_v<std::integer_sequence<long, 2>>,
static_assert(AreAllEqual_v<long, 2>,
"integer sequence must contain one value");
static_assert(!AreAllEqual_v<std::integer_sequence<short, 3, 4>>,
static_assert(!AreAllEqual_v<short, 3, 4>,
"integer sequence must not contain the same values");
static_assert(!AreAllEqual_v<std::integer_sequence<unsigned, 3, 4, 3>>,
static_assert(!AreAllEqual_v<unsigned, 3, 4, 3>,
"integer sequence must not contain the same values");
static_assert(!AreAllEqual_v<std::integer_sequence<int, 4, 4, 3>>,
static_assert(!AreAllEqual_v<int, 4, 4, 3>,
"integer sequence must not contain the same values");
static_assert(IsEmptyOrAreAllEqual_v<std::integer_sequence<short>>,