diff options
Diffstat (limited to 'absl/types')
-rw-r--r-- | absl/types/compare.h | 6 | ||||
-rw-r--r-- | absl/types/compare_test.cc | 4 |
2 files changed, 4 insertions, 6 deletions
diff --git a/absl/types/compare.h b/absl/types/compare.h index 7fed30814050..50361d623025 100644 --- a/absl/types/compare.h +++ b/absl/types/compare.h @@ -452,8 +452,10 @@ namespace compare_internal { // Helper functions to do a boolean comparison of two keys given a boolean // or three-way comparator. -constexpr bool compare_result_as_less_than(const bool r) { return r; } -constexpr bool compare_result_as_less_than(const int r) { return r < 0; } +// SFINAE prevents implicit conversions to bool (such as from int). +template <typename Bool, + absl::enable_if_t<std::is_same<bool, Bool>::value, int> = 0> +constexpr bool compare_result_as_less_than(const Bool r) { return r; } constexpr bool compare_result_as_less_than(const absl::weak_ordering r) { return r < 0; } diff --git a/absl/types/compare_test.cc b/absl/types/compare_test.cc index dd0388c1543d..3a8554219274 100644 --- a/absl/types/compare_test.cc +++ b/absl/types/compare_test.cc @@ -200,10 +200,6 @@ TEST(CompareResultAsLessThan, SanityTest) { EXPECT_FALSE(absl::compare_internal::compare_result_as_less_than(false)); EXPECT_TRUE(absl::compare_internal::compare_result_as_less_than(true)); - EXPECT_TRUE(absl::compare_internal::compare_result_as_less_than(-1)); - EXPECT_FALSE(absl::compare_internal::compare_result_as_less_than(0)); - EXPECT_FALSE(absl::compare_internal::compare_result_as_less_than(1)); - EXPECT_TRUE( absl::compare_internal::compare_result_as_less_than(weak_ordering::less)); EXPECT_FALSE(absl::compare_internal::compare_result_as_less_than( |