diff --git a/quiche/quic/core/congestion_control/send_algorithm_interface.h b/quiche/quic/core/congestion_control/send_algorithm_interface.h
index 568d72a..91ac898 100644
--- a/quiche/quic/core/congestion_control/send_algorithm_interface.h
+++ b/quiche/quic/core/congestion_control/send_algorithm_interface.h
@@ -40,13 +40,7 @@
           rtt(rtt),
           allow_cwnd_to_decrease(allow_cwnd_to_decrease) {}
 
-    bool operator==(const NetworkParams& other) const {
-      return bandwidth == other.bandwidth && rtt == other.rtt &&
-             max_initial_congestion_window ==
-                 other.max_initial_congestion_window &&
-             allow_cwnd_to_decrease == other.allow_cwnd_to_decrease &&
-             is_rtt_trusted == other.is_rtt_trusted;
-    }
+    bool operator==(const NetworkParams& other) const = default;
 
     QuicBandwidth bandwidth = QuicBandwidth::Zero();
     QuicTime::Delta rtt = QuicTime::Delta::Zero();
diff --git a/quiche/quic/core/quic_time.cc b/quiche/quic/core/quic_time.cc
index afbca5b..655ac6d 100644
--- a/quiche/quic/core/quic_time.cc
+++ b/quiche/quic/core/quic_time.cc
@@ -4,7 +4,7 @@
 
 #include "quiche/quic/core/quic_time.h"
 
-#include <cinttypes>
+#include <cstdint>
 #include <cstdlib>
 #include <limits>
 #include <string>
diff --git a/quiche/quic/core/quic_time.h b/quiche/quic/core/quic_time.h
index db913d5..b6d6e89 100644
--- a/quiche/quic/core/quic_time.h
+++ b/quiche/quic/core/quic_time.h
@@ -6,6 +6,7 @@
 #define QUICHE_QUIC_CORE_QUIC_TIME_H_
 
 #include <cmath>
+#include <compare>
 #include <cstddef>
 #include <cstdint>
 #include <limits>
@@ -13,8 +14,9 @@
 #include <ostream>
 #include <string>
 
+#include "absl/base/optimization.h"
 #include "absl/time/time.h"
-#include "quiche/quic/platform/api/quic_export.h"
+#include "quiche/common/platform/api/quiche_export.h"
 
 namespace quic {
 
@@ -97,9 +99,11 @@
     sink.Append(delta.ToDebuggingValue());
   }
 
+  std::strong_ordering operator<=>(const QuicTimeDelta& other) const = default;
+
  private:
-  friend inline bool operator==(QuicTimeDelta lhs, QuicTimeDelta rhs);
-  friend inline bool operator<(QuicTimeDelta lhs, QuicTimeDelta rhs);
+  friend class QuicTime;
+
   friend inline QuicTimeDelta operator<<(QuicTimeDelta lhs, size_t rhs);
   friend inline QuicTimeDelta operator>>(QuicTimeDelta lhs, size_t rhs);
 
@@ -121,8 +125,8 @@
   explicit constexpr QuicTimeDelta(int64_t time_offset)
       : time_offset_(time_offset) {}
 
+  // IMPORTANT: The defaulted comparisons automatically use all data members.
   int64_t time_offset_;
-  friend class QuicTime;
 };
 
 // A microsecond precision timestamp returned by a QuicClock. It is
@@ -157,17 +161,18 @@
 
   bool IsInitialized() const { return 0 != time_; }
 
+  std::strong_ordering operator<=>(const QuicTime& other) const = default;
+
  private:
   friend class QuicClock;
 
-  friend inline bool operator==(QuicTime lhs, QuicTime rhs);
-  friend inline bool operator<(QuicTime lhs, QuicTime rhs);
   friend inline QuicTime operator+(QuicTime lhs, QuicTimeDelta rhs);
   friend inline QuicTime operator-(QuicTime lhs, QuicTimeDelta rhs);
   friend inline QuicTimeDelta operator-(QuicTime lhs, QuicTime rhs);
 
   explicit constexpr QuicTime(int64_t time) : time_(time) {}
 
+  // IMPORTANT: The defaulted comparisons automatically use all data members.
   int64_t time_;
 };
 
@@ -213,9 +218,7 @@
   // minus |delta|.
   [[nodiscard]] QuicWallTime Subtract(QuicTimeDelta delta) const;
 
-  bool operator==(const QuicWallTime& other) const {
-    return microseconds_ == other.microseconds_;
-  }
+  bool operator==(const QuicWallTime& other) const = default;
 
   QuicTimeDelta operator-(const QuicWallTime& rhs) const {
     return QuicTimeDelta::FromMicroseconds(microseconds_ - rhs.microseconds_);
@@ -225,28 +228,11 @@
   explicit constexpr QuicWallTime(uint64_t microseconds)
       : microseconds_(microseconds) {}
 
+  // IMPORTANT: The defaulted comparisons automatically use all data members.
   uint64_t microseconds_;
 };
 
 // Non-member relational operators for QuicTimeDelta.
-inline bool operator==(QuicTimeDelta lhs, QuicTimeDelta rhs) {
-  return lhs.time_offset_ == rhs.time_offset_;
-}
-inline bool operator!=(QuicTimeDelta lhs, QuicTimeDelta rhs) {
-  return !(lhs == rhs);
-}
-inline bool operator<(QuicTimeDelta lhs, QuicTimeDelta rhs) {
-  return lhs.time_offset_ < rhs.time_offset_;
-}
-inline bool operator>(QuicTimeDelta lhs, QuicTimeDelta rhs) {
-  return rhs < lhs;
-}
-inline bool operator<=(QuicTimeDelta lhs, QuicTimeDelta rhs) {
-  return !(rhs < lhs);
-}
-inline bool operator>=(QuicTimeDelta lhs, QuicTimeDelta rhs) {
-  return !(lhs < rhs);
-}
 inline QuicTimeDelta operator<<(QuicTimeDelta lhs, size_t rhs) {
   return QuicTimeDelta(lhs.time_offset_ << rhs);
 }
@@ -254,17 +240,6 @@
   return QuicTimeDelta(lhs.time_offset_ >> rhs);
 }
 
-// Non-member relational operators for QuicTime.
-inline bool operator==(QuicTime lhs, QuicTime rhs) {
-  return lhs.time_ == rhs.time_;
-}
-inline bool operator!=(QuicTime lhs, QuicTime rhs) { return !(lhs == rhs); }
-inline bool operator<(QuicTime lhs, QuicTime rhs) {
-  return lhs.time_ < rhs.time_;
-}
-inline bool operator>(QuicTime lhs, QuicTime rhs) { return rhs < lhs; }
-inline bool operator<=(QuicTime lhs, QuicTime rhs) { return !(rhs < lhs); }
-inline bool operator>=(QuicTime lhs, QuicTime rhs) { return !(lhs < rhs); }
 
 // Override stream output operator for gtest or QUICHE_CHECK macros.
 inline std::ostream& operator<<(std::ostream& output, const QuicTime t) {
diff --git a/quiche/quic/core/quic_time_accumulator_test.cc b/quiche/quic/core/quic_time_accumulator_test.cc
index fd56df4..a7ee727 100644
--- a/quiche/quic/core/quic_time_accumulator_test.cc
+++ b/quiche/quic/core/quic_time_accumulator_test.cc
@@ -4,6 +4,7 @@
 
 #include "quiche/quic/core/quic_time_accumulator.h"
 
+#include "quiche/quic/core/quic_time.h"
 #include "quiche/quic/platform/api/quic_test.h"
 #include "quiche/quic/test_tools/mock_clock.h"
 
diff --git a/quiche/quic/test_tools/quic_test_utils.h b/quiche/quic/test_tools/quic_test_utils.h
index ad85c1c..67bd5d4 100644
--- a/quiche/quic/test_tools/quic_test_utils.h
+++ b/quiche/quic/test_tools/quic_test_utils.h
@@ -2145,19 +2145,17 @@
 class SavingHttp3DatagramVisitor : public QuicSpdyStream::Http3DatagramVisitor {
  public:
   struct SavedHttp3Datagram {
+    bool operator==(const SavedHttp3Datagram&) const = default;
+
     QuicStreamId stream_id;
     std::string payload;
-    bool operator==(const SavedHttp3Datagram& o) const {
-      return stream_id == o.stream_id && payload == o.payload;
-    }
   };
   struct SavedUnknownCapsule {
+    bool operator==(const SavedUnknownCapsule&) const = default;
+
     QuicStreamId stream_id;
     uint64_t type;
     std::string payload;
-    bool operator==(const SavedUnknownCapsule& o) const {
-      return stream_id == o.stream_id && type == o.type && payload == o.payload;
-    }
   };
   const std::vector<SavedHttp3Datagram>& received_h3_datagrams() const {
     return received_h3_datagrams_;
