diff --git a/absl/base/exception_safety_testing_test.cc b/absl/base/exception_safety_testing_test.cc
index 5477b40a5bedaa90367f3ef09e8bd9892b25afdf..f8baf20c9360dee90f6e99636f821183cc100c8d 100644
--- a/absl/base/exception_safety_testing_test.cc
+++ b/absl/base/exception_safety_testing_test.cc
@@ -18,6 +18,7 @@
 #include <exception>
 #include <iostream>
 #include <list>
+#include <type_traits>
 #include <vector>
 
 #include "gtest/gtest-spi.h"
@@ -683,6 +684,18 @@ TEST(AllocInspectorTest, ConstructedTwice) {
         new (&storage) Tracked;
       },
       "re-constructed");
+  reinterpret_cast<Tracked*>(&storage)->~Tracked();
 }
+
+TEST(ThrowingValueTraitsTest, RelationalOperators) {
+  ThrowingValue<> a, b;
+  EXPECT_TRUE((std::is_convertible<decltype(a == b), bool>::value));
+  EXPECT_TRUE((std::is_convertible<decltype(a != b), bool>::value));
+  EXPECT_TRUE((std::is_convertible<decltype(a < b), bool>::value));
+  EXPECT_TRUE((std::is_convertible<decltype(a <= b), bool>::value));
+  EXPECT_TRUE((std::is_convertible<decltype(a > b), bool>::value));
+  EXPECT_TRUE((std::is_convertible<decltype(a >= b), bool>::value));
+}
+
 }  // namespace
 }  // namespace absl
diff --git a/absl/base/internal/exception_safety_testing.h b/absl/base/internal/exception_safety_testing.h
index 8eac2264884fa60c8dfe596a1e4931826ab92f20..adee848b2e9083fc74bf033b8ecb726c6ff0461c 100644
--- a/absl/base/internal/exception_safety_testing.h
+++ b/absl/base/internal/exception_safety_testing.h
@@ -203,12 +203,12 @@ extern exceptions_internal::NoThrowTag no_throw_ctor;
 inline void SetCountdown() { exceptions_internal::countdown = 0; }
 inline void UnsetCountdown() { exceptions_internal::countdown = -1; }
 
-// A test class which is contextually convertible to bool.  The conversion can
-// be instrumented to throw at a controlled time.
+// A test class which is convertible to bool.  The conversion can be
+// instrumented to throw at a controlled time.
 class ThrowingBool {
  public:
   ThrowingBool(bool b) noexcept : b_(b) {}  // NOLINT(runtime/explicit)
-  explicit operator bool() const {
+  operator bool() const {  // NOLINT(runtime/explicit)
     exceptions_internal::MaybeThrow(ABSL_PRETTY_FUNCTION);
     return b_;
   }
@@ -355,6 +355,8 @@ class ThrowingValue : private exceptions_internal::TrackedObject {
   }
 
   // Comparison Operators
+  // NOTE: We use `ThrowingBool` instead of `bool` because most STL
+  // types/containers requires T to be convertible to bool.
   friend ThrowingBool operator==(const ThrowingValue& a,
                                  const ThrowingValue& b) {
     exceptions_internal::MaybeThrow(ABSL_PRETTY_FUNCTION);