diff --git a/quic/core/quic_versions.cc b/quic/core/quic_versions.cc
index 372d5d0..9a0f469 100644
--- a/quic/core/quic_versions.cc
+++ b/quic/core/quic_versions.cc
@@ -206,7 +206,15 @@
 }
 
 ParsedQuicVersionVector AllSupportedVersions() {
-  ParsedQuicVersionVector supported_versions;
+  const auto& supported_versions = SupportedVersions();
+  return ParsedQuicVersionVector(supported_versions.begin(),
+                                 supported_versions.end());
+}
+
+constexpr std::array<ParsedQuicVersion, NumSupportedVersions()>
+SupportedVersions() {
+  std::array<ParsedQuicVersion, NumSupportedVersions()> supported_versions{};
+  size_t index = 0;
   for (HandshakeProtocol protocol : kSupportedHandshakeProtocols) {
     for (QuicTransportVersion version : kSupportedTransportVersions) {
       if (protocol == PROTOCOL_TLS1_3 &&
@@ -216,7 +224,8 @@
         // We explicitly removed support for T048 and T049 to reduce test load.
         continue;
       }
-      supported_versions.push_back(ParsedQuicVersion(protocol, version));
+      supported_versions[index] = ParsedQuicVersion(protocol, version);
+      index++;
     }
   }
   return supported_versions;
diff --git a/quic/core/quic_versions.h b/quic/core/quic_versions.h
index 5b09ad6..44a2fa5 100644
--- a/quic/core/quic_versions.h
+++ b/quic/core/quic_versions.h
@@ -15,6 +15,7 @@
 #ifndef QUICHE_QUIC_CORE_QUIC_VERSIONS_H_
 #define QUICHE_QUIC_CORE_QUIC_VERSIONS_H_
 
+#include <array>
 #include <string>
 #include <vector>
 
@@ -143,6 +144,10 @@
       : handshake_protocol(other.handshake_protocol),
         transport_version(other.transport_version) {}
 
+  constexpr ParsedQuicVersion()
+      : handshake_protocol(PROTOCOL_UNSUPPORTED),
+        transport_version(QUIC_VERSION_UNSUPPORTED) {}
+
   ParsedQuicVersion& operator=(const ParsedQuicVersion& other) {
     if (this != &other) {
       handshake_protocol = other.handshake_protocol;
@@ -218,13 +223,13 @@
 // skipped as necessary).
 //
 // See go/new-quic-version for more details on how to roll out new versions.
-static const QuicTransportVersion kSupportedTransportVersions[] = {
+static const constexpr QuicTransportVersion kSupportedTransportVersions[] = {
     QUIC_VERSION_99, QUIC_VERSION_50, QUIC_VERSION_49,
     QUIC_VERSION_48, QUIC_VERSION_46, QUIC_VERSION_43,
 };
 
 // This vector contains all crypto handshake protocols that are supported.
-static const HandshakeProtocol kSupportedHandshakeProtocols[] = {
+static const constexpr HandshakeProtocol kSupportedHandshakeProtocols[] = {
     PROTOCOL_QUIC_CRYPTO, PROTOCOL_TLS1_3};
 
 typedef std::vector<QuicTransportVersion> QuicTransportVersionVector;
@@ -232,10 +237,42 @@
 // Returns a vector of QUIC versions in kSupportedTransportVersions.
 QUIC_EXPORT_PRIVATE QuicTransportVersionVector AllSupportedTransportVersions();
 
-// Returns a vector of QUIC versions that is the cartesian product of
-// kSupportedTransportVersions and kSupportedHandshakeProtocols.
+// DEPRECATED: Use SupportedVersions() instead.
+// Returns a vector of all ParsedQuicVersions that are valid.
 QUIC_EXPORT_PRIVATE ParsedQuicVersionVector AllSupportedVersions();
 
+// Returns whether |transport_version| uses CRYPTO frames for the handshake
+// instead of stream 1.
+QUIC_EXPORT_PRIVATE inline constexpr bool QuicVersionUsesCryptoFrames(
+    QuicTransportVersion transport_version) {
+  return transport_version >= QUIC_VERSION_48;
+}
+
+// Returns the size of the array/vector for
+// SupportedVersions/AllSupportedVersions.
+constexpr size_t NumSupportedVersions() {
+  size_t count = 0;
+  for (HandshakeProtocol protocol : kSupportedHandshakeProtocols) {
+    for (QuicTransportVersion version : kSupportedTransportVersions) {
+      if (protocol == PROTOCOL_TLS1_3 &&
+          (!QuicVersionUsesCryptoFrames(version) ||
+           version <= QUIC_VERSION_49)) {
+        // The TLS handshake is only deployable if CRYPTO frames are also used.
+        // We explicitly removed support for T048 and T049 to reduce test load.
+        continue;
+      }
+      count++;
+    }
+  }
+  return count;
+}
+
+// Returns an array of all ParsedQuicVersions that are valid. This is a
+// constexpr equivalent of AllSupportedVersions.
+QUIC_EXPORT_PRIVATE constexpr std::array<ParsedQuicVersion,
+                                         NumSupportedVersions()>
+SupportedVersions();
+
 // Returns a vector of QUIC versions that is the cartesian product of
 // kSupportedTransportVersions and kSupportedHandshakeProtocols, with any
 // versions disabled by flags excluded.
@@ -390,13 +427,6 @@
   return transport_version >= QUIC_VERSION_49;
 }
 
-// Returns whether |transport_version| uses CRYPTO frames for the handshake
-// instead of stream 1.
-QUIC_EXPORT_PRIVATE inline bool QuicVersionUsesCryptoFrames(
-    QuicTransportVersion transport_version) {
-  return transport_version >= QUIC_VERSION_48;
-}
-
 // Returns whether |transport_version| makes use of IETF QUIC
 // frames or not.
 QUIC_EXPORT_PRIVATE inline bool VersionHasIetfQuicFrames(
