diff --git a/quic/core/quic_one_block_arena.h b/quic/core/quic_one_block_arena.h
index 15c0a99..ada5cd3 100644
--- a/quic/core/quic_one_block_arena.h
+++ b/quic/core/quic_one_block_arena.h
@@ -24,7 +24,7 @@
   static const uint32_t kMaxAlign = 8;
 
  public:
-  QuicOneBlockArena();
+  QuicOneBlockArena() : offset_(0) {}
   QuicOneBlockArena(const QuicOneBlockArena&) = delete;
   QuicOneBlockArena& operator=(const QuicOneBlockArena&) = delete;
 
@@ -32,7 +32,24 @@
   // forwarded to |T|'s constructor. The returned pointer's lifetime is
   // controlled by QuicArenaScopedPtr.
   template <typename T, typename... Args>
-  QuicArenaScopedPtr<T> New(Args&&... args);
+  QuicArenaScopedPtr<T> New(Args&&... args) {
+    DCHECK_LT(AlignedSize<T>(), ArenaSize)
+        << "Object is too large for the arena.";
+    static_assert(alignof(T) > 1,
+                  "Objects added to the arena must be at least 2B aligned.");
+    if (QUIC_PREDICT_FALSE(offset_ > ArenaSize - AlignedSize<T>())) {
+      QUIC_BUG << "Ran out of space in QuicOneBlockArena at " << this
+               << ", max size was " << ArenaSize << ", failing request was "
+               << AlignedSize<T>() << ", end of arena was " << offset_;
+      return QuicArenaScopedPtr<T>(new T(std::forward<Args>(args)...));
+    }
+
+    void* buf = &storage_[offset_];
+    new (buf) T(std::forward<Args>(args)...);
+    offset_ += AlignedSize<T>();
+    return QuicArenaScopedPtr<T>(buf,
+                                 QuicArenaScopedPtr<T>::ConstructFrom::kArena);
+  }
 
  private:
   // Returns the size of |T| aligned up to |kMaxAlign|.
@@ -49,30 +66,6 @@
   uint32_t offset_;
 };
 
-template <uint32_t ArenaSize>
-QuicOneBlockArena<ArenaSize>::QuicOneBlockArena() : offset_(0) {}
-
-template <uint32_t ArenaSize>
-template <typename T, typename... Args>
-QuicArenaScopedPtr<T> QuicOneBlockArena<ArenaSize>::New(Args&&... args) {
-  DCHECK_LT(AlignedSize<T>(), ArenaSize)
-      << "Object is too large for the arena.";
-  static_assert(alignof(T) > 1,
-                "Objects added to the arena must be at least 2B aligned.");
-  if (QUIC_PREDICT_FALSE(offset_ > ArenaSize - AlignedSize<T>())) {
-    QUIC_BUG << "Ran out of space in QuicOneBlockArena at " << this
-             << ", max size was " << ArenaSize << ", failing request was "
-             << AlignedSize<T>() << ", end of arena was " << offset_;
-    return QuicArenaScopedPtr<T>(new T(std::forward<Args>(args)...));
-  }
-
-  void* buf = &storage_[offset_];
-  new (buf) T(std::forward<Args>(args)...);
-  offset_ += AlignedSize<T>();
-  return QuicArenaScopedPtr<T>(buf,
-                               QuicArenaScopedPtr<T>::ConstructFrom::kArena);
-}
-
 // QuicConnections currently use around 1KB of polymorphic types which would
 // ordinarily be on the heap. Instead, store them inline in an arena.
 using QuicConnectionArena = QuicOneBlockArena<1056>;
