diff --git a/quiche/quic/core/quic_crypto_server_stream.cc b/quiche/quic/core/quic_crypto_server_stream.cc
index c95a8a2..d7d5d0d 100644
--- a/quiche/quic/core/quic_crypto_server_stream.cc
+++ b/quiche/quic/core/quic_crypto_server_stream.cc
@@ -6,6 +6,7 @@
 
 #include <cstddef>
 #include <cstdint>
+#include <iterator>
 #include <memory>
 #include <string>
 #include <utility>
@@ -415,7 +416,7 @@
   SHA256(reinterpret_cast<const uint8_t*>(channel_id.data()), channel_id.size(),
          digest);
 
-  quiche::QuicheTextUtils::Base64Encode(digest, ABSL_ARRAYSIZE(digest), output);
+  quiche::QuicheTextUtils::Base64Encode(digest, std::size(digest), output);
   return true;
 }
 
diff --git a/quiche/quic/core/quic_dispatcher.cc b/quiche/quic/core/quic_dispatcher.cc
index 3ff69f1..5a04ab6 100644
--- a/quiche/quic/core/quic_dispatcher.cc
+++ b/quiche/quic/core/quic_dispatcher.cc
@@ -9,6 +9,7 @@
 #include <algorithm>
 #include <cstddef>
 #include <cstdint>
+#include <iterator>
 #include <limits>
 #include <list>
 #include <memory>
@@ -400,7 +401,7 @@
       11211,  // memcache, vulnerable to reflection attacks.
               // This list MUST be sorted in increasing order.
   };
-  constexpr size_t num_blocked_ports = ABSL_ARRAYSIZE(blocked_ports);
+  constexpr size_t num_blocked_ports = std::size(blocked_ports);
   constexpr uint16_t highest_blocked_port =
       blocked_ports[num_blocked_ports - 1];
   if (ABSL_PREDICT_TRUE(port > highest_blocked_port)) {
diff --git a/quiche/quic/core/quic_framer.cc b/quiche/quic/core/quic_framer.cc
index 42c6a87..e5e4090 100644
--- a/quiche/quic/core/quic_framer.cc
+++ b/quiche/quic/core/quic_framer.cc
@@ -9,6 +9,7 @@
 #include <algorithm>
 #include <cstddef>
 #include <cstdint>
+#include <iterator>
 #include <limits>
 #include <memory>
 #include <optional>
@@ -1569,7 +1570,7 @@
     // operating on aligned memory.
     ABSL_CACHELINE_ALIGNED char buffer[kMaxIncomingPacketSize];
     rv = ProcessIetfDataPacket(&reader, &header, packet, buffer,
-                               ABSL_ARRAYSIZE(buffer));
+                               std::size(buffer));
   } else {
     std::unique_ptr<char[]> large_buffer(new char[packet.length()]);
     rv = ProcessIetfDataPacket(&reader, &header, packet, large_buffer.get(),
@@ -4421,7 +4422,7 @@
       static_cast<QuicPacketNumberLength>((header->type_byte & 0x03) + 1);
 
   char pn_buffer[IETF_MAX_PACKET_NUMBER_LENGTH] = {};
-  QuicDataWriter pn_writer(ABSL_ARRAYSIZE(pn_buffer), pn_buffer);
+  QuicDataWriter pn_writer(std::size(pn_buffer), pn_buffer);
 
   // Read the (protected) packet number from the reader and unmask the packet
   // number.
diff --git a/quiche/quic/core/quic_tag.cc b/quiche/quic/core/quic_tag.cc
index 27a71e4..d620159 100644
--- a/quiche/quic/core/quic_tag.cc
+++ b/quiche/quic/core/quic_tag.cc
@@ -7,6 +7,7 @@
 #include <algorithm>
 #include <cstddef>
 #include <cstdint>
+#include <iterator>
 #include <string>
 #include <vector>
 
@@ -47,10 +48,9 @@
   bool ascii = true;
   const QuicTag orig_tag = tag;
 
-  for (size_t i = 0; i < ABSL_ARRAYSIZE(chars); i++) {
+  for (size_t i = 0; i < std::size(chars); i++) {
     chars[i] = static_cast<char>(tag);
-    if ((chars[i] == 0 || chars[i] == '\xff') &&
-        i == ABSL_ARRAYSIZE(chars) - 1) {
+    if ((chars[i] == 0 || chars[i] == '\xff') && i == std::size(chars) - 1) {
       chars[i] = ' ';
     }
     if (!absl::ascii_isprint(static_cast<unsigned char>(chars[i]))) {
diff --git a/quiche/quic/core/quic_utils.cc b/quiche/quic/core/quic_utils.cc
index cd18fb1..1d31545 100644
--- a/quiche/quic/core/quic_utils.cc
+++ b/quiche/quic/core/quic_utils.cc
@@ -7,6 +7,7 @@
 #include <algorithm>
 #include <cstdint>
 #include <cstring>
+#include <iterator>
 #include <limits>
 #include <string>
 
@@ -473,7 +474,7 @@
   if (!VersionIsIetfQuic(version)) {
     char connection_id_bytes[8] = {0, 0, 0, 0, 0, 0, 0, 0};
     return QuicConnectionId(static_cast<char*>(connection_id_bytes),
-                            ABSL_ARRAYSIZE(connection_id_bytes));
+                            std::size(connection_id_bytes));
   }
   return EmptyQuicConnectionId();
 }
diff --git a/quiche/quic/core/quic_versions.h b/quiche/quic/core/quic_versions.h
index c019e81..7093f73 100644
--- a/quiche/quic/core/quic_versions.h
+++ b/quiche/quic/core/quic_versions.h
@@ -26,6 +26,7 @@
 #include <array>
 #include <cstddef>
 #include <cstdint>
+#include <iterator>
 #include <limits>
 #include <ostream>
 #include <string>
@@ -163,7 +164,7 @@
       QUIC_VERSION_RESERVED_FOR_NEGOTIATION,
       QUIC_VERSION_UNSUPPORTED,
   };
-  for (size_t i = 0; i < ABSL_ARRAYSIZE(valid_transport_versions); ++i) {
+  for (size_t i = 0; i < std::size(valid_transport_versions); ++i) {
     if (transport_version == valid_transport_versions[i]) {
       return true;
     }
