mirror of
https://github.com/abseil/abseil-cpp.git
synced 2026-06-04 12:07:05 +08:00
Mark c_min_element, c_max_element, and c_minmax_element as constexpr in C++17.
This allows them to be used in constant expressions, such as static_asserts. PiperOrigin-RevId: 649292841 Change-Id: I76e31a94b933fa357276fee534b81c00c28c8b23
This commit is contained in:
committed by
Copybara-Service
parent
eb46a63d77
commit
074a32af66
@@ -1168,6 +1168,42 @@ TEST(ConstexprTest, Distance) {
|
||||
// Works at compile time with constexpr containers.
|
||||
static_assert(absl::c_distance(std::array<int, 3>()) == 3);
|
||||
}
|
||||
|
||||
TEST(ConstexprTest, MinElement) {
|
||||
constexpr std::array<int, 3> kArray = {1, 2, 3};
|
||||
static_assert(*absl::c_min_element(kArray) == 1);
|
||||
}
|
||||
|
||||
TEST(ConstexprTest, MinElementWithPredicate) {
|
||||
constexpr std::array<int, 3> kArray = {1, 2, 3};
|
||||
static_assert(*absl::c_min_element(kArray, std::greater<int>()) == 3);
|
||||
}
|
||||
|
||||
TEST(ConstexprTest, MaxElement) {
|
||||
constexpr std::array<int, 3> kArray = {1, 2, 3};
|
||||
static_assert(*absl::c_max_element(kArray) == 3);
|
||||
}
|
||||
|
||||
TEST(ConstexprTest, MaxElementWithPredicate) {
|
||||
constexpr std::array<int, 3> kArray = {1, 2, 3};
|
||||
static_assert(*absl::c_max_element(kArray, std::greater<int>()) == 1);
|
||||
}
|
||||
|
||||
TEST(ConstexprTest, MinMaxElement) {
|
||||
static constexpr std::array<int, 3> kArray = {1, 2, 3};
|
||||
constexpr auto kMinMaxPair = absl::c_minmax_element(kArray);
|
||||
static_assert(*kMinMaxPair.first == 1);
|
||||
static_assert(*kMinMaxPair.second == 3);
|
||||
}
|
||||
|
||||
TEST(ConstexprTest, MinMaxElementWithPredicate) {
|
||||
static constexpr std::array<int, 3> kArray = {1, 2, 3};
|
||||
constexpr auto kMinMaxPair =
|
||||
absl::c_minmax_element(kArray, std::greater<int>());
|
||||
static_assert(*kMinMaxPair.first == 3);
|
||||
static_assert(*kMinMaxPair.second == 1);
|
||||
}
|
||||
|
||||
#endif // defined(ABSL_INTERNAL_CPLUSPLUS_LANG) &&
|
||||
// ABSL_INTERNAL_CPLUSPLUS_LANG >= 201703L
|
||||
|
||||
|
||||
Reference in New Issue
Block a user