about summary refs log tree commit diff
path: root/absl/types
diff options
context:
space:
mode:
Diffstat (limited to 'absl/types')
-rw-r--r--absl/types/compare.h6
-rw-r--r--absl/types/compare_test.cc4
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(