Migrate `absl::variant` to `std::variant`

This was largely automated with the following commands:

```
fgrep -lr '"third_party/absl/types/variant.h"' third_party/{quiche,http2,quic} | xargs sed -i -e 's;"third_party/absl/types/variant.h";<variant>;g'
fgrep -lr 'absl::visit' third_party/{quiche,http2,quic} | grep -v METADATA.common | xargs sed -i -e 's/absl::visit/std::visit/g'
fgrep -lr 'absl::variant' third_party/{quiche,http2,quic} | grep -v METADATA.common | xargs sed -i -e 's/absl::variant/std::variant/g'
fgrep -lr 'absl::get' third_party/{quiche,http2,quic} | grep -v METADATA.common | xargs sed -i -e 's/absl::get/std::get/g'
fgrep -lr 'absl::holds_alternative' third_party/{quiche,http2,quic} | grep -v METADATA.common | xargs sed -i -e 's/absl::holds_alternative/std::holds_alternative/g'
fgrep -lr 'absl::monostate' third_party/{quiche,http2,quic} | grep -v METADATA.common | xargs sed -i -e 's/absl::monostate/std::monostate/g'
```

This should be a no-op when `absl::variant` is already a typedef for `std::variant`, which should now be the case everywhere.

PiperOrigin-RevId: 738550360
diff --git a/quiche/common/capsule.cc b/quiche/common/capsule.cc
index 90da0d7..ad25bbc 100644
--- a/quiche/common/capsule.cc
+++ b/quiche/common/capsule.cc
@@ -13,6 +13,7 @@
 #include <string>
 #include <type_traits>
 #include <utility>
+#include <variant>
 
 #include "absl/status/status.h"
 #include "absl/status/statusor.h"
@@ -20,7 +21,6 @@
 #include "absl/strings/str_cat.h"
 #include "absl/strings/string_view.h"
 #include "absl/types/span.h"
-#include "absl/types/variant.h"
 #include "quiche/common/platform/api/quiche_bug_tracker.h"
 #include "quiche/common/platform/api/quiche_export.h"
 #include "quiche/common/platform/api/quiche_logging.h"
@@ -230,8 +230,8 @@
 }
 
 std::string Capsule::ToString() const {
-  return absl::visit([](const auto& capsule) { return capsule.ToString(); },
-                     capsule_);
+  return std::visit([](const auto& capsule) { return capsule.ToString(); },
+                    capsule_);
 }
 
 std::ostream& operator<<(std::ostream& os, const Capsule& capsule) {
diff --git a/quiche/common/capsule.h b/quiche/common/capsule.h
index ec71c2b..45970db 100644
--- a/quiche/common/capsule.h
+++ b/quiche/common/capsule.h
@@ -10,11 +10,11 @@
 #include <cstdint>
 #include <optional>
 #include <string>
+#include <variant>
 #include <vector>
 
 #include "absl/status/statusor.h"
 #include "absl/strings/string_view.h"
-#include "absl/types/variant.h"
 #include "quiche/common/platform/api/quiche_export.h"
 #include "quiche/common/platform/api/quiche_logging.h"
 #include "quiche/common/quiche_buffer_allocator.h"
@@ -265,114 +265,114 @@
                                                 const Capsule& capsule);
 
   CapsuleType capsule_type() const {
-    return absl::visit(
+    return std::visit(
         [](const auto& capsule) { return capsule.capsule_type(); }, capsule_);
   }
   DatagramCapsule& datagram_capsule() {
-    return absl::get<DatagramCapsule>(capsule_);
+    return std::get<DatagramCapsule>(capsule_);
   }
   const DatagramCapsule& datagram_capsule() const {
-    return absl::get<DatagramCapsule>(capsule_);
+    return std::get<DatagramCapsule>(capsule_);
   }
   LegacyDatagramCapsule& legacy_datagram_capsule() {
-    return absl::get<LegacyDatagramCapsule>(capsule_);
+    return std::get<LegacyDatagramCapsule>(capsule_);
   }
   const LegacyDatagramCapsule& legacy_datagram_capsule() const {
-    return absl::get<LegacyDatagramCapsule>(capsule_);
+    return std::get<LegacyDatagramCapsule>(capsule_);
   }
   LegacyDatagramWithoutContextCapsule&
   legacy_datagram_without_context_capsule() {
-    return absl::get<LegacyDatagramWithoutContextCapsule>(capsule_);
+    return std::get<LegacyDatagramWithoutContextCapsule>(capsule_);
   }
   const LegacyDatagramWithoutContextCapsule&
   legacy_datagram_without_context_capsule() const {
-    return absl::get<LegacyDatagramWithoutContextCapsule>(capsule_);
+    return std::get<LegacyDatagramWithoutContextCapsule>(capsule_);
   }
   CloseWebTransportSessionCapsule& close_web_transport_session_capsule() {
-    return absl::get<CloseWebTransportSessionCapsule>(capsule_);
+    return std::get<CloseWebTransportSessionCapsule>(capsule_);
   }
   const CloseWebTransportSessionCapsule& close_web_transport_session_capsule()
       const {
-    return absl::get<CloseWebTransportSessionCapsule>(capsule_);
+    return std::get<CloseWebTransportSessionCapsule>(capsule_);
   }
   AddressRequestCapsule& address_request_capsule() {
-    return absl::get<AddressRequestCapsule>(capsule_);
+    return std::get<AddressRequestCapsule>(capsule_);
   }
   const AddressRequestCapsule& address_request_capsule() const {
-    return absl::get<AddressRequestCapsule>(capsule_);
+    return std::get<AddressRequestCapsule>(capsule_);
   }
   AddressAssignCapsule& address_assign_capsule() {
-    return absl::get<AddressAssignCapsule>(capsule_);
+    return std::get<AddressAssignCapsule>(capsule_);
   }
   const AddressAssignCapsule& address_assign_capsule() const {
-    return absl::get<AddressAssignCapsule>(capsule_);
+    return std::get<AddressAssignCapsule>(capsule_);
   }
   RouteAdvertisementCapsule& route_advertisement_capsule() {
-    return absl::get<RouteAdvertisementCapsule>(capsule_);
+    return std::get<RouteAdvertisementCapsule>(capsule_);
   }
   const RouteAdvertisementCapsule& route_advertisement_capsule() const {
-    return absl::get<RouteAdvertisementCapsule>(capsule_);
+    return std::get<RouteAdvertisementCapsule>(capsule_);
   }
   CompressionAssignCapsule& compression_assign_capsule() {
-    return absl::get<CompressionAssignCapsule>(capsule_);
+    return std::get<CompressionAssignCapsule>(capsule_);
   }
   const CompressionAssignCapsule& compression_assign_capsule() const {
-    return absl::get<CompressionAssignCapsule>(capsule_);
+    return std::get<CompressionAssignCapsule>(capsule_);
   }
   CompressionCloseCapsule& compression_close_capsule() {
-    return absl::get<CompressionCloseCapsule>(capsule_);
+    return std::get<CompressionCloseCapsule>(capsule_);
   }
   const CompressionCloseCapsule& compression_close_capsule() const {
-    return absl::get<CompressionCloseCapsule>(capsule_);
+    return std::get<CompressionCloseCapsule>(capsule_);
   }
   WebTransportStreamDataCapsule& web_transport_stream_data() {
-    return absl::get<WebTransportStreamDataCapsule>(capsule_);
+    return std::get<WebTransportStreamDataCapsule>(capsule_);
   }
   const WebTransportStreamDataCapsule& web_transport_stream_data() const {
-    return absl::get<WebTransportStreamDataCapsule>(capsule_);
+    return std::get<WebTransportStreamDataCapsule>(capsule_);
   }
   WebTransportResetStreamCapsule& web_transport_reset_stream() {
-    return absl::get<WebTransportResetStreamCapsule>(capsule_);
+    return std::get<WebTransportResetStreamCapsule>(capsule_);
   }
   const WebTransportResetStreamCapsule& web_transport_reset_stream() const {
-    return absl::get<WebTransportResetStreamCapsule>(capsule_);
+    return std::get<WebTransportResetStreamCapsule>(capsule_);
   }
   WebTransportStopSendingCapsule& web_transport_stop_sending() {
-    return absl::get<WebTransportStopSendingCapsule>(capsule_);
+    return std::get<WebTransportStopSendingCapsule>(capsule_);
   }
   const WebTransportStopSendingCapsule& web_transport_stop_sending() const {
-    return absl::get<WebTransportStopSendingCapsule>(capsule_);
+    return std::get<WebTransportStopSendingCapsule>(capsule_);
   }
   WebTransportMaxStreamDataCapsule& web_transport_max_stream_data() {
-    return absl::get<WebTransportMaxStreamDataCapsule>(capsule_);
+    return std::get<WebTransportMaxStreamDataCapsule>(capsule_);
   }
   const WebTransportMaxStreamDataCapsule& web_transport_max_stream_data()
       const {
-    return absl::get<WebTransportMaxStreamDataCapsule>(capsule_);
+    return std::get<WebTransportMaxStreamDataCapsule>(capsule_);
   }
   WebTransportMaxStreamsCapsule& web_transport_max_streams() {
-    return absl::get<WebTransportMaxStreamsCapsule>(capsule_);
+    return std::get<WebTransportMaxStreamsCapsule>(capsule_);
   }
   const WebTransportMaxStreamsCapsule& web_transport_max_streams() const {
-    return absl::get<WebTransportMaxStreamsCapsule>(capsule_);
+    return std::get<WebTransportMaxStreamsCapsule>(capsule_);
   }
   UnknownCapsule& unknown_capsule() {
-    return absl::get<UnknownCapsule>(capsule_);
+    return std::get<UnknownCapsule>(capsule_);
   }
   const UnknownCapsule& unknown_capsule() const {
-    return absl::get<UnknownCapsule>(capsule_);
+    return std::get<UnknownCapsule>(capsule_);
   }
 
  private:
-  absl::variant<DatagramCapsule, LegacyDatagramCapsule,
-                LegacyDatagramWithoutContextCapsule,
-                CloseWebTransportSessionCapsule,
-                DrainWebTransportSessionCapsule, AddressRequestCapsule,
-                AddressAssignCapsule, RouteAdvertisementCapsule,
-                WebTransportStreamDataCapsule, WebTransportResetStreamCapsule,
-                WebTransportStopSendingCapsule, WebTransportMaxStreamsCapsule,
-                WebTransportMaxStreamDataCapsule, UnknownCapsule,
-                CompressionAssignCapsule, CompressionCloseCapsule>
+  std::variant<DatagramCapsule, LegacyDatagramCapsule,
+               LegacyDatagramWithoutContextCapsule,
+               CloseWebTransportSessionCapsule, DrainWebTransportSessionCapsule,
+               AddressRequestCapsule, AddressAssignCapsule,
+               RouteAdvertisementCapsule, WebTransportStreamDataCapsule,
+               WebTransportResetStreamCapsule, WebTransportStopSendingCapsule,
+               WebTransportMaxStreamsCapsule, WebTransportMaxStreamDataCapsule,
+               UnknownCapsule, CompressionAssignCapsule,
+               CompressionCloseCapsule>
       capsule_;
 };
 
diff --git a/quiche/common/structured_headers.h b/quiche/common/structured_headers.h
index 32acedd..fd05782 100644
--- a/quiche/common/structured_headers.h
+++ b/quiche/common/structured_headers.h
@@ -12,10 +12,10 @@
 #include <string>
 #include <tuple>
 #include <utility>
+#include <variant>
 #include <vector>
 
 #include "absl/strings/string_view.h"
-#include "absl/types/variant.h"
 #include "quiche/common/platform/api/quiche_export.h"
 #include "quiche/common/platform/api/quiche_logging.h"
 
@@ -92,30 +92,30 @@
   bool is_boolean() const { return Type() == kBooleanType; }
 
   int64_t GetInteger() const {
-    const auto* value = absl::get_if<int64_t>(&value_);
+    const auto* value = std::get_if<int64_t>(&value_);
     QUICHE_CHECK(value);
     return *value;
   }
   double GetDecimal() const {
-    const auto* value = absl::get_if<double>(&value_);
+    const auto* value = std::get_if<double>(&value_);
     QUICHE_CHECK(value);
     return *value;
   }
   bool GetBoolean() const {
-    const auto* value = absl::get_if<bool>(&value_);
+    const auto* value = std::get_if<bool>(&value_);
     QUICHE_CHECK(value);
     return *value;
   }
   // TODO(iclelland): Split up accessors for String, Token and Byte Sequence.
   const std::string& GetString() const {
     struct Visitor {
-      const std::string* operator()(const absl::monostate&) { return nullptr; }
+      const std::string* operator()(const std::monostate&) { return nullptr; }
       const std::string* operator()(const int64_t&) { return nullptr; }
       const std::string* operator()(const double&) { return nullptr; }
       const std::string* operator()(const std::string& value) { return &value; }
       const std::string* operator()(const bool&) { return nullptr; }
     };
-    const std::string* value = absl::visit(Visitor(), value_);
+    const std::string* value = std::visit(Visitor(), value_);
     QUICHE_CHECK(value);
     return *value;
   }
@@ -123,13 +123,13 @@
   // Transfers ownership of the underlying String, Token, or Byte Sequence.
   std::string TakeString() && {
     struct Visitor {
-      std::string* operator()(absl::monostate&) { return nullptr; }
+      std::string* operator()(std::monostate&) { return nullptr; }
       std::string* operator()(int64_t&) { return nullptr; }
       std::string* operator()(double&) { return nullptr; }
       std::string* operator()(std::string& value) { return &value; }
       std::string* operator()(bool&) { return nullptr; }
     };
-    std::string* value = absl::visit(Visitor(), value_);
+    std::string* value = std::visit(Visitor(), value_);
     QUICHE_CHECK(value);
     return std::move(*value);
   }
@@ -137,8 +137,8 @@
   ItemType Type() const { return static_cast<ItemType>(value_.index()); }
 
  private:
-  absl::variant<absl::monostate, int64_t, double, std::string, std::string,
-                std::string, bool>
+  std::variant<std::monostate, int64_t, double, std::string, std::string,
+               std::string, bool>
       value_;
 };
 
diff --git a/quiche/http2/adapter/http2_protocol.cc b/quiche/http2/adapter/http2_protocol.cc
index d26abdd..15060df 100644
--- a/quiche/http2/adapter/http2_protocol.cc
+++ b/quiche/http2/adapter/http2_protocol.cc
@@ -10,10 +10,10 @@
 namespace adapter {
 
 std::pair<absl::string_view, bool> GetStringView(const HeaderRep& rep) {
-  if (absl::holds_alternative<absl::string_view>(rep)) {
-    return std::make_pair(absl::get<absl::string_view>(rep), true);
+  if (std::holds_alternative<absl::string_view>(rep)) {
+    return std::make_pair(std::get<absl::string_view>(rep), true);
   } else {
-    absl::string_view view = absl::get<std::string>(rep);
+    absl::string_view view = std::get<std::string>(rep);
     return std::make_pair(view, false);
   }
 }
diff --git a/quiche/http2/adapter/http2_protocol.h b/quiche/http2/adapter/http2_protocol.h
index 7597f43..9967a96 100644
--- a/quiche/http2/adapter/http2_protocol.h
+++ b/quiche/http2/adapter/http2_protocol.h
@@ -4,10 +4,10 @@
 #include <cstdint>
 #include <string>
 #include <utility>
+#include <variant>
 
 #include "absl/base/attributes.h"
 #include "absl/strings/string_view.h"
-#include "absl/types/variant.h"
 #include "quiche/common/platform/api/quiche_export.h"
 
 namespace http2 {
@@ -23,7 +23,7 @@
 using Http2PingId = uint64_t;
 
 // Represents a single header name or value.
-using HeaderRep = absl::variant<absl::string_view, std::string>;
+using HeaderRep = std::variant<absl::string_view, std::string>;
 
 // Boolean return value is true if |rep| holds a string_view, which is assumed
 // to have an indefinite lifetime.
diff --git a/quiche/http2/adapter/oghttp2_session.cc b/quiche/http2/adapter/oghttp2_session.cc
index 3d22313..2a5ec62 100644
--- a/quiche/http2/adapter/oghttp2_session.cc
+++ b/quiche/http2/adapter/oghttp2_session.cc
@@ -487,10 +487,10 @@
 int64_t OgHttp2Session::ProcessBytes(absl::string_view bytes) {
   QUICHE_VLOG(3) << TracePerspectiveAsString(options_.perspective)
                  << " processing [" << absl::CEscape(bytes) << "]";
-  return absl::visit(ProcessBytesResultVisitor(), ProcessBytesImpl(bytes));
+  return std::visit(ProcessBytesResultVisitor(), ProcessBytesImpl(bytes));
 }
 
-absl::variant<int64_t, OgHttp2Session::ProcessBytesError>
+std::variant<int64_t, OgHttp2Session::ProcessBytesError>
 OgHttp2Session::ProcessBytesImpl(absl::string_view bytes) {
   if (processing_bytes_) {
     QUICHE_VLOG(2) << "Returning early; already processing bytes.";
diff --git a/quiche/http2/adapter/oghttp2_session.h b/quiche/http2/adapter/oghttp2_session.h
index 62b7f3e..363f0ce 100644
--- a/quiche/http2/adapter/oghttp2_session.h
+++ b/quiche/http2/adapter/oghttp2_session.h
@@ -6,10 +6,10 @@
 #include <list>
 #include <memory>
 #include <optional>
+#include <variant>
 #include <vector>
 
 #include "absl/strings/string_view.h"
-#include "absl/types/variant.h"
 #include "quiche/http2/adapter/chunked_buffer.h"
 #include "quiche/http2/adapter/data_source.h"
 #include "quiche/http2/adapter/event_forwarder.h"
@@ -364,7 +364,7 @@
     // A user/visitor callback failed with a fatal error.
     kVisitorCallbackFailed,
   };
-  using ProcessBytesResult = absl::variant<int64_t, ProcessBytesError>;
+  using ProcessBytesResult = std::variant<int64_t, ProcessBytesError>;
 
   // Attempts to process `bytes` and returns the number of bytes proccessed on
   // success or the processing error on failure.
diff --git a/quiche/http2/core/spdy_protocol.h b/quiche/http2/core/spdy_protocol.h
index cc2fc73..a5ec174 100644
--- a/quiche/http2/core/spdy_protocol.h
+++ b/quiche/http2/core/spdy_protocol.h
@@ -18,10 +18,10 @@
 #include <optional>
 #include <string>
 #include <utility>
+#include <variant>
 #include <vector>
 
 #include "absl/strings/string_view.h"
-#include "absl/types/variant.h"
 #include "quiche/http2/core/spdy_alt_svc_wire_format.h"
 #include "quiche/http2/core/spdy_bitmasks.h"
 #include "quiche/common/http/http_header_block.h"
@@ -378,7 +378,7 @@
   // Returns true if this instance is a SPDY 3.x priority, or false if this
   // instance is an HTTP/2 stream dependency.
   bool is_spdy3_priority() const {
-    return absl::holds_alternative<SpdyPriority>(precedence_);
+    return std::holds_alternative<SpdyPriority>(precedence_);
   }
 
   // Returns SPDY 3.x priority value. If |is_spdy3_priority()| is true, this is
@@ -389,9 +389,9 @@
   // precedence).
   SpdyPriority spdy3_priority() const {
     return is_spdy3_priority()
-               ? absl::get<SpdyPriority>(precedence_)
+               ? std::get<SpdyPriority>(precedence_)
                : Http2WeightToSpdy3Priority(
-                     absl::get<Http2StreamDependency>(precedence_).weight);
+                     std::get<Http2StreamDependency>(precedence_).weight);
   }
 
   // Returns HTTP/2 parent stream ID. If |is_spdy3_priority()| is false, this is
@@ -399,7 +399,7 @@
   StreamIdType parent_id() const {
     return is_spdy3_priority()
                ? kHttp2RootStreamId
-               : absl::get<Http2StreamDependency>(precedence_).parent_id;
+               : std::get<Http2StreamDependency>(precedence_).parent_id;
   }
 
   // Returns HTTP/2 stream weight. If |is_spdy3_priority()| is false, this is
@@ -410,16 +410,15 @@
   // minimum weight 1.
   int weight() const {
     return is_spdy3_priority()
-               ? Spdy3PriorityToHttp2Weight(
-                     absl::get<SpdyPriority>(precedence_))
-               : absl::get<Http2StreamDependency>(precedence_).weight;
+               ? Spdy3PriorityToHttp2Weight(std::get<SpdyPriority>(precedence_))
+               : std::get<Http2StreamDependency>(precedence_).weight;
   }
 
   // Returns HTTP/2 parent stream exclusivity. If |is_spdy3_priority()| is
   // false, this is the value provided at construction, otherwise it is false.
   bool is_exclusive() const {
-    return absl::holds_alternative<Http2StreamDependency>(precedence_) &&
-           absl::get<Http2StreamDependency>(precedence_).is_exclusive;
+    return std::holds_alternative<Http2StreamDependency>(precedence_) &&
+           std::get<Http2StreamDependency>(precedence_).is_exclusive;
   }
 
   // Facilitates test assertions.
@@ -443,7 +442,7 @@
     }
   };
 
-  absl::variant<SpdyPriority, Http2StreamDependency> precedence_;
+  std::variant<SpdyPriority, Http2StreamDependency> precedence_;
 };
 
 typedef StreamPrecedence<SpdyStreamId> SpdyStreamPrecedence;
diff --git a/quiche/quic/core/crypto/proof_source.h b/quiche/quic/core/crypto/proof_source.h
index 1e263e5..3976bfb 100644
--- a/quiche/quic/core/crypto/proof_source.h
+++ b/quiche/quic/core/crypto/proof_source.h
@@ -11,11 +11,11 @@
 #include <memory>
 #include <optional>
 #include <string>
+#include <variant>
 #include <vector>
 
 #include "absl/status/status.h"
 #include "absl/strings/string_view.h"
-#include "absl/types/variant.h"
 #include "openssl/base.h"
 #include "openssl/pool.h"
 #include "openssl/ssl.h"
@@ -280,7 +280,7 @@
     QuicDelayedSSLConfig delayed_ssl_config;
   };
 
-  using SSLConfig = absl::variant<LocalSSLConfig, HintsSSLConfig>;
+  using SSLConfig = std::variant<LocalSSLConfig, HintsSSLConfig>;
 
   // Called when a ProofSourceHandle::SelectCertificate operation completes.
   // |ok| indicates whether the operation was successful.
diff --git a/quiche/quic/core/io/event_loop_connecting_client_socket.cc b/quiche/quic/core/io/event_loop_connecting_client_socket.cc
index 53dfb1f..f4bb6ff 100644
--- a/quiche/quic/core/io/event_loop_connecting_client_socket.cc
+++ b/quiche/quic/core/io/event_loop_connecting_client_socket.cc
@@ -7,12 +7,12 @@
 #include <limits>
 #include <string>
 #include <utility>
+#include <variant>
 
 #include "absl/status/status.h"
 #include "absl/status/statusor.h"
 #include "absl/strings/string_view.h"
 #include "absl/types/span.h"
-#include "absl/types/variant.h"
 #include "quiche/quic/core/io/quic_event_loop.h"
 #include "quiche/quic/core/io/socket.h"
 #include "quiche/quic/platform/api/quic_socket_address.h"
@@ -43,7 +43,7 @@
   // safely recover if state indicates caller may be expecting async callbacks.
   QUICHE_DCHECK(connect_status_ != ConnectStatus::kConnecting);
   QUICHE_DCHECK(!receive_max_size_.has_value());
-  QUICHE_DCHECK(absl::holds_alternative<absl::monostate>(send_data_));
+  QUICHE_DCHECK(std::holds_alternative<std::monostate>(send_data_));
   if (descriptor_ != kInvalidSocketFd) {
     QUICHE_BUG(quic_event_loop_connecting_socket_invalid_destruction)
         << "Must call Disconnect() on connected socket before destruction.";
@@ -58,7 +58,7 @@
   QUICHE_DCHECK_EQ(descriptor_, kInvalidSocketFd);
   QUICHE_DCHECK(connect_status_ == ConnectStatus::kNotConnected);
   QUICHE_DCHECK(!receive_max_size_.has_value());
-  QUICHE_DCHECK(absl::holds_alternative<absl::monostate>(send_data_));
+  QUICHE_DCHECK(std::holds_alternative<std::monostate>(send_data_));
 
   absl::Status status = Open();
   if (!status.ok()) {
@@ -108,7 +108,7 @@
   QUICHE_DCHECK_EQ(descriptor_, kInvalidSocketFd);
   QUICHE_DCHECK(connect_status_ == ConnectStatus::kNotConnected);
   QUICHE_DCHECK(!receive_max_size_.has_value());
-  QUICHE_DCHECK(absl::holds_alternative<absl::monostate>(send_data_));
+  QUICHE_DCHECK(std::holds_alternative<std::monostate>(send_data_));
 
   absl::Status status = Open();
   if (!status.ok()) {
@@ -132,8 +132,8 @@
   bool require_receive_callback = receive_max_size_.has_value();
   receive_max_size_.reset();
   bool require_send_callback =
-      !absl::holds_alternative<absl::monostate>(send_data_);
-  send_data_ = absl::monostate();
+      !std::holds_alternative<std::monostate>(send_data_);
+  send_data_ = std::monostate();
   send_remaining_ = "";
 
   if (require_connect_callback) {
@@ -213,7 +213,7 @@
 
 absl::Status EventLoopConnectingClientSocket::SendBlocking(std::string data) {
   QUICHE_DCHECK(!data.empty());
-  QUICHE_DCHECK(absl::holds_alternative<absl::monostate>(send_data_));
+  QUICHE_DCHECK(std::holds_alternative<std::monostate>(send_data_));
 
   send_data_ = std::move(data);
   return SendBlockingInternal();
@@ -222,7 +222,7 @@
 absl::Status EventLoopConnectingClientSocket::SendBlocking(
     quiche::QuicheMemSlice data) {
   QUICHE_DCHECK(!data.empty());
-  QUICHE_DCHECK(absl::holds_alternative<absl::monostate>(send_data_));
+  QUICHE_DCHECK(std::holds_alternative<std::monostate>(send_data_));
 
   send_data_ = std::move(data);
   return SendBlockingInternal();
@@ -230,21 +230,20 @@
 
 void EventLoopConnectingClientSocket::SendAsync(std::string data) {
   QUICHE_DCHECK(!data.empty());
-  QUICHE_DCHECK(absl::holds_alternative<absl::monostate>(send_data_));
+  QUICHE_DCHECK(std::holds_alternative<std::monostate>(send_data_));
 
   send_data_ = std::move(data);
-  send_remaining_ = absl::get<std::string>(send_data_);
+  send_remaining_ = std::get<std::string>(send_data_);
 
   FinishOrRearmAsyncSend(SendInternal());
 }
 
 void EventLoopConnectingClientSocket::SendAsync(quiche::QuicheMemSlice data) {
   QUICHE_DCHECK(!data.empty());
-  QUICHE_DCHECK(absl::holds_alternative<absl::monostate>(send_data_));
+  QUICHE_DCHECK(std::holds_alternative<std::monostate>(send_data_));
 
   send_data_ = std::move(data);
-  send_remaining_ =
-      absl::get<quiche::QuicheMemSlice>(send_data_).AsStringView();
+  send_remaining_ = std::get<quiche::QuicheMemSlice>(send_data_).AsStringView();
 
   FinishOrRearmAsyncSend(SendInternal());
 }
@@ -274,7 +273,7 @@
   QUICHE_DCHECK_EQ(descriptor_, kInvalidSocketFd);
   QUICHE_DCHECK(connect_status_ == ConnectStatus::kNotConnected);
   QUICHE_DCHECK(!receive_max_size_.has_value());
-  QUICHE_DCHECK(absl::holds_alternative<absl::monostate>(send_data_));
+  QUICHE_DCHECK(std::holds_alternative<std::monostate>(send_data_));
   QUICHE_DCHECK(send_remaining_.empty());
 
   absl::StatusOr<SocketFd> descriptor =
@@ -356,7 +355,7 @@
   QUICHE_DCHECK_NE(descriptor_, kInvalidSocketFd);
   QUICHE_DCHECK(connect_status_ == ConnectStatus::kNotConnected);
   QUICHE_DCHECK(!receive_max_size_.has_value());
-  QUICHE_DCHECK(absl::holds_alternative<absl::monostate>(send_data_));
+  QUICHE_DCHECK(std::holds_alternative<std::monostate>(send_data_));
 
   absl::Status connect_result = socket_api::Connect(descriptor_, peer_address_);
 
@@ -379,7 +378,7 @@
   QUICHE_DCHECK_NE(descriptor_, kInvalidSocketFd);
   QUICHE_DCHECK(connect_status_ == ConnectStatus::kConnecting);
   QUICHE_DCHECK(!receive_max_size_.has_value());
-  QUICHE_DCHECK(absl::holds_alternative<absl::monostate>(send_data_));
+  QUICHE_DCHECK(std::holds_alternative<std::monostate>(send_data_));
 
   absl::Status error = socket_api::GetSocketError(descriptor_);
 
@@ -516,7 +515,7 @@
 absl::Status EventLoopConnectingClientSocket::SendBlockingInternal() {
   QUICHE_DCHECK_NE(descriptor_, kInvalidSocketFd);
   QUICHE_DCHECK(connect_status_ == ConnectStatus::kConnected);
-  QUICHE_DCHECK(!absl::holds_alternative<absl::monostate>(send_data_));
+  QUICHE_DCHECK(!std::holds_alternative<std::monostate>(send_data_));
   QUICHE_DCHECK(send_remaining_.empty());
 
   absl::Status status =
@@ -525,15 +524,15 @@
     QUICHE_LOG_FIRST_N(WARNING, 100)
         << "Failed to set socket to address: " << peer_address_.ToString()
         << " as blocking for send with error: " << status;
-    send_data_ = absl::monostate();
+    send_data_ = std::monostate();
     return status;
   }
 
-  if (absl::holds_alternative<std::string>(send_data_)) {
-    send_remaining_ = absl::get<std::string>(send_data_);
+  if (std::holds_alternative<std::string>(send_data_)) {
+    send_remaining_ = std::get<std::string>(send_data_);
   } else {
     send_remaining_ =
-        absl::get<quiche::QuicheMemSlice>(send_data_).AsStringView();
+        std::get<quiche::QuicheMemSlice>(send_data_).AsStringView();
   }
 
   status = SendInternal();
@@ -541,10 +540,10 @@
     QUICHE_LOG_FIRST_N(ERROR, 100)
         << "Non-blocking send for should-be blocking socket to address:"
         << peer_address_.ToString();
-    send_data_ = absl::monostate();
+    send_data_ = std::monostate();
     send_remaining_ = "";
   } else {
-    QUICHE_DCHECK(absl::holds_alternative<absl::monostate>(send_data_));
+    QUICHE_DCHECK(std::holds_alternative<std::monostate>(send_data_));
     QUICHE_DCHECK(send_remaining_.empty());
   }
 
@@ -564,7 +563,7 @@
 absl::Status EventLoopConnectingClientSocket::SendInternal() {
   QUICHE_DCHECK_NE(descriptor_, kInvalidSocketFd);
   QUICHE_DCHECK(connect_status_ == ConnectStatus::kConnected);
-  QUICHE_DCHECK(!absl::holds_alternative<absl::monostate>(send_data_));
+  QUICHE_DCHECK(!std::holds_alternative<std::monostate>(send_data_));
   QUICHE_DCHECK(!send_remaining_.empty());
 
   // Repeat send until all data sent, unavailable, or error.
@@ -586,14 +585,14 @@
         QUICHE_DVLOG(1) << "Failed to send to socket to address: "
                         << peer_address_.ToString()
                         << " with error: " << remainder.status();
-        send_data_ = absl::monostate();
+        send_data_ = std::monostate();
         send_remaining_ = "";
       }
       return remainder.status();
     }
   }
 
-  send_data_ = absl::monostate();
+  send_data_ = std::monostate();
   return absl::OkStatus();
 }
 
@@ -608,10 +607,10 @@
           descriptor_, kSocketEventWritable | kSocketEventError);
       QUICHE_DCHECK(result);
     }
-    QUICHE_DCHECK(!absl::holds_alternative<absl::monostate>(send_data_));
+    QUICHE_DCHECK(!std::holds_alternative<std::monostate>(send_data_));
     QUICHE_DCHECK(!send_remaining_.empty());
   } else {
-    QUICHE_DCHECK(absl::holds_alternative<absl::monostate>(send_data_));
+    QUICHE_DCHECK(std::holds_alternative<std::monostate>(send_data_));
     QUICHE_DCHECK(send_remaining_.empty());
     async_visitor_->SendComplete(status);
   }
diff --git a/quiche/quic/core/io/event_loop_connecting_client_socket.h b/quiche/quic/core/io/event_loop_connecting_client_socket.h
index a4fb9e9..73d547f 100644
--- a/quiche/quic/core/io/event_loop_connecting_client_socket.h
+++ b/quiche/quic/core/io/event_loop_connecting_client_socket.h
@@ -7,10 +7,10 @@
 
 #include <optional>
 #include <string>
+#include <variant>
 
 #include "absl/status/status.h"
 #include "absl/strings/string_view.h"
-#include "absl/types/variant.h"
 #include "quiche/quic/core/connecting_client_socket.h"
 #include "quiche/quic/core/io/quic_event_loop.h"
 #include "quiche/quic/core/io/socket.h"
@@ -93,8 +93,7 @@
   std::optional<QuicByteCount> receive_max_size_;
 
   // Only contains data while send in progress or pending, otherwise monostate.
-  absl::variant<absl::monostate, std::string, quiche::QuicheMemSlice>
-      send_data_;
+  std::variant<std::monostate, std::string, quiche::QuicheMemSlice> send_data_;
   // Points to the unsent portion of `send_data_` while send in progress or
   // pending, otherwise empty.
   absl::string_view send_remaining_;
diff --git a/quiche/quic/core/quic_connection_alarms.h b/quiche/quic/core/quic_connection_alarms.h
index b3ace88..a8e45d5 100644
--- a/quiche/quic/core/quic_connection_alarms.h
+++ b/quiche/quic/core/quic_connection_alarms.h
@@ -10,9 +10,9 @@
 #include <cstdint>
 #include <optional>
 #include <string>
+#include <variant>
 
 #include "absl/base/nullability.h"
-#include "absl/types/variant.h"
 #include "quiche/quic/core/quic_alarm.h"
 #include "quiche/quic/core/quic_alarm_factory.h"
 #include "quiche/quic/core/quic_arena_scoped_ptr.h"
@@ -381,21 +381,21 @@
         : alarm_(alarm) {}
 
     bool IsSet() const {
-      return absl::visit([](auto& alarm) { return alarm.IsSet(); }, alarm_);
+      return std::visit([](auto& alarm) { return alarm.IsSet(); }, alarm_);
     }
     QuicTime deadline() const {
-      return absl::visit([](auto& alarm) { return alarm.deadline(); }, alarm_);
+      return std::visit([](auto& alarm) { return alarm.deadline(); }, alarm_);
     }
     bool IsPermanentlyCancelled() const {
-      return absl::visit(
+      return std::visit(
           [](auto& alarm) { return alarm.IsPermanentlyCancelled(); }, alarm_);
     }
 
    private:
     friend class ::quic::test::QuicConnectionAlarmsPeer;
 
-    absl::variant<QuicConnectionAlarmHolder::ConstAlarmProxy,
-                  QuicAlarmMultiplexer::ConstAlarmProxy>
+    std::variant<QuicConnectionAlarmHolder::ConstAlarmProxy,
+                 QuicAlarmMultiplexer::ConstAlarmProxy>
         alarm_;
   };
 
@@ -409,35 +409,35 @@
         : alarm_(alarm) {}
 
     bool IsSet() const {
-      return absl::visit([](auto& alarm) { return alarm.IsSet(); }, alarm_);
+      return std::visit([](auto& alarm) { return alarm.IsSet(); }, alarm_);
     }
     QuicTime deadline() const {
-      return absl::visit([](auto& alarm) { return alarm.deadline(); }, alarm_);
+      return std::visit([](auto& alarm) { return alarm.deadline(); }, alarm_);
     }
     bool IsPermanentlyCancelled() const {
-      return absl::visit(
+      return std::visit(
           [](auto& alarm) { return alarm.IsPermanentlyCancelled(); }, alarm_);
     }
 
     void Set(QuicTime new_deadline) {
-      absl::visit([&](auto& alarm) { alarm.Set(new_deadline); }, alarm_);
+      std::visit([&](auto& alarm) { alarm.Set(new_deadline); }, alarm_);
     }
     void Update(QuicTime new_deadline, QuicTime::Delta granularity) {
-      absl::visit([&](auto& alarm) { alarm.Update(new_deadline, granularity); },
-                  alarm_);
+      std::visit([&](auto& alarm) { alarm.Update(new_deadline, granularity); },
+                 alarm_);
     }
     void Cancel() {
-      absl::visit([&](auto& alarm) { alarm.Cancel(); }, alarm_);
+      std::visit([&](auto& alarm) { alarm.Cancel(); }, alarm_);
     }
     void PermanentCancel() {
-      absl::visit([&](auto& alarm) { alarm.PermanentCancel(); }, alarm_);
+      std::visit([&](auto& alarm) { alarm.PermanentCancel(); }, alarm_);
     }
 
    private:
     friend class ::quic::test::QuicConnectionAlarmsPeer;
 
-    absl::variant<QuicConnectionAlarmHolder::AlarmProxy,
-                  QuicAlarmMultiplexer::AlarmProxy>
+    std::variant<QuicConnectionAlarmHolder::AlarmProxy,
+                 QuicAlarmMultiplexer::AlarmProxy>
         alarm_;
   };
 
diff --git a/quiche/quic/core/quic_stream_priority.h b/quiche/quic/core/quic_stream_priority.h
index b1b35df..40817b6 100644
--- a/quiche/quic/core/quic_stream_priority.h
+++ b/quiche/quic/core/quic_stream_priority.h
@@ -9,9 +9,9 @@
 #include <optional>
 #include <string>
 #include <tuple>
+#include <variant>
 
 #include "absl/strings/string_view.h"
-#include "absl/types/variant.h"
 #include "quiche/quic/core/quic_types.h"
 #include "quiche/common/platform/api/quiche_bug_tracker.h"
 #include "quiche/common/platform/api/quiche_export.h"
@@ -74,19 +74,19 @@
   explicit QuicStreamPriority(WebTransportStreamPriority priority)
       : value_(priority) {}
 
-  QuicPriorityType type() const { return absl::visit(TypeExtractor(), value_); }
+  QuicPriorityType type() const { return std::visit(TypeExtractor(), value_); }
 
   HttpStreamPriority http() const {
-    if (absl::holds_alternative<HttpStreamPriority>(value_)) {
-      return absl::get<HttpStreamPriority>(value_);
+    if (std::holds_alternative<HttpStreamPriority>(value_)) {
+      return std::get<HttpStreamPriority>(value_);
     }
     QUICHE_BUG(invalid_priority_type_http)
         << "Tried to access HTTP priority for a priority type" << type();
     return HttpStreamPriority();
   }
   WebTransportStreamPriority web_transport() const {
-    if (absl::holds_alternative<WebTransportStreamPriority>(value_)) {
-      return absl::get<WebTransportStreamPriority>(value_);
+    if (std::holds_alternative<WebTransportStreamPriority>(value_)) {
+      return std::get<WebTransportStreamPriority>(value_);
     }
     QUICHE_BUG(invalid_priority_type_wt)
         << "Tried to access WebTransport priority for a priority type"
@@ -108,7 +108,7 @@
     }
   };
 
-  absl::variant<HttpStreamPriority, WebTransportStreamPriority> value_;
+  std::variant<HttpStreamPriority, WebTransportStreamPriority> value_;
 };
 
 // Serializes the Priority Field Value for a PRIORITY_UPDATE frame.
diff --git a/quiche/quic/core/tls_server_handshaker.cc b/quiche/quic/core/tls_server_handshaker.cc
index 884e57d..12b1637 100644
--- a/quiche/quic/core/tls_server_handshaker.cc
+++ b/quiche/quic/core/tls_server_handshaker.cc
@@ -11,13 +11,13 @@
 #include <optional>
 #include <string>
 #include <utility>
+#include <variant>
 #include <vector>
 
 #include "absl/status/status.h"
 #include "absl/strings/str_cat.h"
 #include "absl/strings/string_view.h"
 #include "absl/types/span.h"
-#include "absl/types/variant.h"
 #include "openssl/base.h"
 #include "openssl/bytestring.h"
 #include "openssl/ssl.h"
@@ -1074,7 +1074,7 @@
 
   // Extract the delayed SSL config from either LocalSSLConfig or
   // HintsSSLConfig.
-  const QuicDelayedSSLConfig& delayed_ssl_config = absl::visit(
+  const QuicDelayedSSLConfig& delayed_ssl_config = std::visit(
       [](const auto& config) { return config.delayed_ssl_config; }, ssl_config);
 
   if (delayed_ssl_config.quic_transport_parameters.has_value()) {
@@ -1100,7 +1100,7 @@
   }
 
   if (ok) {
-    if (auto* local_config = absl::get_if<LocalSSLConfig>(&ssl_config);
+    if (auto* local_config = std::get_if<LocalSSLConfig>(&ssl_config);
         local_config != nullptr) {
       if (local_config->chain && !local_config->chain->certs.empty()) {
         tls_connection_.SetCertChain(
@@ -1114,7 +1114,7 @@
                          << ", client_address:"
                          << session()->connection()->peer_address();
       }
-    } else if (auto* hints_config = absl::get_if<HintsSSLConfig>(&ssl_config);
+    } else if (auto* hints_config = std::get_if<HintsSSLConfig>(&ssl_config);
                hints_config != nullptr) {
       select_alpn_ = std::move(hints_config->select_alpn);
       if (hints_config->configure_ssl) {
diff --git a/quiche/quic/moqt/moqt_framer.cc b/quiche/quic/moqt/moqt_framer.cc
index 862d7e3..e086460 100644
--- a/quiche/quic/moqt/moqt_framer.cc
+++ b/quiche/quic/moqt/moqt_framer.cc
@@ -11,13 +11,13 @@
 #include <string>
 #include <type_traits>
 #include <utility>
+#include <variant>
 #include <vector>
 
 #include "absl/container/inlined_vector.h"
 #include "absl/status/status.h"
 #include "absl/status/statusor.h"
 #include "absl/strings/string_view.h"
-#include "absl/types/variant.h"
 #include "quiche/quic/core/quic_data_writer.h"
 #include "quiche/quic/core/quic_time.h"
 #include "quiche/quic/moqt/moqt_messages.h"
diff --git a/quiche/quic/moqt/moqt_messages.h b/quiche/quic/moqt/moqt_messages.h
index d961905..070e415 100644
--- a/quiche/quic/moqt/moqt_messages.h
+++ b/quiche/quic/moqt/moqt_messages.h
@@ -13,6 +13,7 @@
 #include <optional>
 #include <string>
 #include <utility>
+#include <variant>
 #include <vector>
 
 #include "absl/container/inlined_vector.h"
@@ -20,7 +21,6 @@
 #include "absl/strings/str_format.h"
 #include "absl/strings/string_view.h"
 #include "absl/types/span.h"
-#include "absl/types/variant.h"
 #include "quiche/quic/core/quic_time.h"
 #include "quiche/quic/core/quic_types.h"
 #include "quiche/quic/core/quic_versions.h"
diff --git a/quiche/quic/moqt/moqt_parser_test.cc b/quiche/quic/moqt/moqt_parser_test.cc
index 926980e..cbca5fc 100644
--- a/quiche/quic/moqt/moqt_parser_test.cc
+++ b/quiche/quic/moqt/moqt_parser_test.cc
@@ -11,11 +11,11 @@
 #include <memory>
 #include <optional>
 #include <string>
+#include <variant>
 #include <vector>
 
 #include "absl/strings/str_join.h"
 #include "absl/strings/string_view.h"
-#include "absl/types/variant.h"
 #include "quiche/quic/core/quic_data_writer.h"
 #include "quiche/quic/core/quic_time.h"
 #include "quiche/quic/moqt/moqt_messages.h"
@@ -66,7 +66,7 @@
 };
 
 using GeneralizedMessageType =
-    absl::variant<MoqtMessageType, MoqtDataStreamType>;
+    std::variant<MoqtMessageType, MoqtDataStreamType>;
 }  // namespace
 
 struct MoqtParserTestParams {
@@ -107,8 +107,8 @@
 }
 std::string ParamNameFormatter(
     const testing::TestParamInfo<MoqtParserTestParams>& info) {
-  return absl::visit([](auto x) { return TypeFormatter(x); },
-                     info.param.message_type) +
+  return std::visit([](auto x) { return TypeFormatter(x); },
+                    info.param.message_type) +
          "_" + (info.param.uses_web_transport ? "WebTransport" : "QUIC");
 }
 
@@ -247,14 +247,14 @@
         data_parser_(&data_stream_, &visitor_) {}
 
   bool IsDataStream() {
-    return absl::holds_alternative<MoqtDataStreamType>(message_type_);
+    return std::holds_alternative<MoqtDataStreamType>(message_type_);
   }
 
   std::unique_ptr<TestMessageBase> MakeMessage() {
     if (IsDataStream()) {
-      return CreateTestDataStream(absl::get<MoqtDataStreamType>(message_type_));
+      return CreateTestDataStream(std::get<MoqtDataStreamType>(message_type_));
     } else {
-      return CreateTestMessage(absl::get<MoqtMessageType>(message_type_),
+      return CreateTestMessage(std::get<MoqtMessageType>(message_type_),
                                webtrans_);
     }
   }
diff --git a/quiche/quic/moqt/test_tools/moqt_framer_utils.cc b/quiche/quic/moqt/test_tools/moqt_framer_utils.cc
index e991830..709907e 100644
--- a/quiche/quic/moqt/test_tools/moqt_framer_utils.cc
+++ b/quiche/quic/moqt/test_tools/moqt_framer_utils.cc
@@ -5,13 +5,13 @@
 #include "quiche/quic/moqt/test_tools/moqt_framer_utils.h"
 
 #include <string>
+#include <variant>
 #include <vector>
 
 #include "absl/status/status.h"
 #include "absl/strings/str_join.h"
 #include "absl/strings/string_view.h"
 #include "absl/types/span.h"
-#include "absl/types/variant.h"
 #include "quiche/quic/moqt/moqt_framer.h"
 #include "quiche/quic/moqt/moqt_messages.h"
 #include "quiche/quic/moqt/moqt_parser.h"
@@ -293,11 +293,11 @@
 std::string SerializeGenericMessage(const MoqtGenericFrame& frame,
                                     bool use_webtrans) {
   MoqtFramer framer(quiche::SimpleBufferAllocator::Get(), use_webtrans);
-  return std::string(absl::visit(FramingVisitor{framer}, frame).AsStringView());
+  return std::string(std::visit(FramingVisitor{framer}, frame).AsStringView());
 }
 
 MoqtMessageType MessageTypeForGenericMessage(const MoqtGenericFrame& frame) {
-  return absl::visit(TypeVisitor(), frame);
+  return std::visit(TypeVisitor(), frame);
 }
 
 std::vector<MoqtGenericFrame> ParseGenericMessage(absl::string_view body) {
@@ -313,12 +313,11 @@
     const quiche::StreamWriteOptions& options) const {
   std::string merged_message = absl::StrJoin(data, "");
   std::vector<MoqtGenericFrame> frames = ParseGenericMessage(merged_message);
-  if (frames.size() != 1 ||
-      !absl::holds_alternative<MoqtSubscribe>(frames[0])) {
+  if (frames.size() != 1 || !std::holds_alternative<MoqtSubscribe>(frames[0])) {
     ADD_FAILURE() << "Expected one SUBSCRIBE frame in a write";
     return absl::InternalError("Expected one SUBSCRIBE frame in a write");
   }
-  *subscribe_ = absl::get<MoqtSubscribe>(frames[0]);
+  *subscribe_ = std::get<MoqtSubscribe>(frames[0]);
   return absl::OkStatus();
 }
 
diff --git a/quiche/quic/moqt/test_tools/moqt_framer_utils.h b/quiche/quic/moqt/test_tools/moqt_framer_utils.h
index 944e50b..ac5760b 100644
--- a/quiche/quic/moqt/test_tools/moqt_framer_utils.h
+++ b/quiche/quic/moqt/test_tools/moqt_framer_utils.h
@@ -8,13 +8,13 @@
 #include <cstdint>
 #include <optional>
 #include <string>
+#include <variant>
 #include <vector>
 
 #include "absl/status/status.h"
 #include "absl/strings/str_join.h"
 #include "absl/strings/string_view.h"
 #include "absl/types/span.h"
-#include "absl/types/variant.h"
 #include "quiche/quic/moqt/moqt_messages.h"
 #include "quiche/common/platform/api/quiche_test.h"
 #include "quiche/common/quiche_data_reader.h"
@@ -25,15 +25,15 @@
 // TODO: remove MoqtObject from TestMessageBase::MessageStructuredData and merge
 // those two types.
 using MoqtGenericFrame =
-    absl::variant<MoqtClientSetup, MoqtServerSetup, MoqtSubscribe,
-                  MoqtSubscribeOk, MoqtSubscribeError, MoqtUnsubscribe,
-                  MoqtSubscribeDone, MoqtSubscribeUpdate, MoqtAnnounce,
-                  MoqtAnnounceOk, MoqtAnnounceError, MoqtAnnounceCancel,
-                  MoqtTrackStatusRequest, MoqtUnannounce, MoqtTrackStatus,
-                  MoqtGoAway, MoqtSubscribeAnnounces, MoqtSubscribeAnnouncesOk,
-                  MoqtSubscribeAnnouncesError, MoqtUnsubscribeAnnounces,
-                  MoqtMaxSubscribeId, MoqtFetch, MoqtFetchCancel, MoqtFetchOk,
-                  MoqtFetchError, MoqtSubscribesBlocked, MoqtObjectAck>;
+    std::variant<MoqtClientSetup, MoqtServerSetup, MoqtSubscribe,
+                 MoqtSubscribeOk, MoqtSubscribeError, MoqtUnsubscribe,
+                 MoqtSubscribeDone, MoqtSubscribeUpdate, MoqtAnnounce,
+                 MoqtAnnounceOk, MoqtAnnounceError, MoqtAnnounceCancel,
+                 MoqtTrackStatusRequest, MoqtUnannounce, MoqtTrackStatus,
+                 MoqtGoAway, MoqtSubscribeAnnounces, MoqtSubscribeAnnouncesOk,
+                 MoqtSubscribeAnnouncesError, MoqtUnsubscribeAnnounces,
+                 MoqtMaxSubscribeId, MoqtFetch, MoqtFetchCancel, MoqtFetchOk,
+                 MoqtFetchError, MoqtSubscribesBlocked, MoqtObjectAck>;
 
 MoqtMessageType MessageTypeForGenericMessage(const MoqtGenericFrame& frame);
 
diff --git a/quiche/quic/moqt/test_tools/moqt_test_message.h b/quiche/quic/moqt/test_tools/moqt_test_message.h
index 1eca5c6..dd0a326 100644
--- a/quiche/quic/moqt/test_tools/moqt_test_message.h
+++ b/quiche/quic/moqt/test_tools/moqt_test_message.h
@@ -12,10 +12,10 @@
 #include <optional>
 #include <string>
 #include <utility>
+#include <variant>
 #include <vector>
 
 #include "absl/strings/string_view.h"
-#include "absl/types/variant.h"
 #include "quiche/quic/core/quic_data_reader.h"
 #include "quiche/quic/core/quic_data_writer.h"
 #include "quiche/quic/core/quic_time.h"
@@ -37,15 +37,16 @@
  public:
   virtual ~TestMessageBase() = default;
 
-  using MessageStructuredData = absl::variant<
-      MoqtClientSetup, MoqtServerSetup, MoqtObject, MoqtSubscribe,
-      MoqtSubscribeOk, MoqtSubscribeError, MoqtUnsubscribe, MoqtSubscribeDone,
-      MoqtSubscribeUpdate, MoqtAnnounce, MoqtAnnounceOk, MoqtAnnounceError,
-      MoqtAnnounceCancel, MoqtTrackStatusRequest, MoqtUnannounce,
-      MoqtTrackStatus, MoqtGoAway, MoqtSubscribeAnnounces,
-      MoqtSubscribeAnnouncesOk, MoqtSubscribeAnnouncesError,
-      MoqtUnsubscribeAnnounces, MoqtMaxSubscribeId, MoqtFetch, MoqtFetchCancel,
-      MoqtFetchOk, MoqtFetchError, MoqtSubscribesBlocked, MoqtObjectAck>;
+  using MessageStructuredData =
+      std::variant<MoqtClientSetup, MoqtServerSetup, MoqtObject, MoqtSubscribe,
+                   MoqtSubscribeOk, MoqtSubscribeError, MoqtUnsubscribe,
+                   MoqtSubscribeDone, MoqtSubscribeUpdate, MoqtAnnounce,
+                   MoqtAnnounceOk, MoqtAnnounceError, MoqtAnnounceCancel,
+                   MoqtTrackStatusRequest, MoqtUnannounce, MoqtTrackStatus,
+                   MoqtGoAway, MoqtSubscribeAnnounces, MoqtSubscribeAnnouncesOk,
+                   MoqtSubscribeAnnouncesError, MoqtUnsubscribeAnnounces,
+                   MoqtMaxSubscribeId, MoqtFetch, MoqtFetchCancel, MoqtFetchOk,
+                   MoqtFetchError, MoqtSubscribesBlocked, MoqtObjectAck>;
 
   // The total actual size of the message.
   size_t total_message_size() const { return wire_image_size_; }
diff --git a/quiche/quic/test_tools/quic_connection_peer.cc b/quiche/quic/test_tools/quic_connection_peer.cc
index 73bce8d..e74ae4c 100644
--- a/quiche/quic/test_tools/quic_connection_peer.cc
+++ b/quiche/quic/test_tools/quic_connection_peer.cc
@@ -6,10 +6,10 @@
 
 #include <memory>
 #include <string>
+#include <variant>
 
 
 #include "absl/strings/string_view.h"
-#include "absl/types/variant.h"
 #include "quiche/quic/core/congestion_control/send_algorithm_interface.h"
 #include "quiche/quic/core/quic_connection.h"
 #include "quiche/quic/core/quic_connection_alarms.h"
@@ -36,7 +36,7 @@
       alarm.multiplexer_->Fire(alarm.slot_);
     }
   } visitor;
-  absl::visit(visitor, alarm.alarm_);
+  std::visit(visitor, alarm.alarm_);
 }
 
 // static