Introduce private `kMaxPosition` constants instead of repeating an expression
for the limit.

Special cases:

* In `SnappyWriterBase::PushSlow()`, continue to use a higher limit than
  `kMaxPosition` to allow creating a larger buffer near the end of the supported
  range and filling it partially.

* Fix `riegeli::tensorflow::FileWriter`: the position is limited by `int64_t`,
  as evidenced by `tsl::WritableFile::Tell()`.

PiperOrigin-RevId: 917084196
diff --git a/python/riegeli/bytes/python_reader.cc b/python/riegeli/bytes/python_reader.cc
index 7565158..e1907a5 100644
--- a/python/riegeli/bytes/python_reader.cc
+++ b/python/riegeli/bytes/python_reader.cc
@@ -175,12 +175,11 @@
     }
   }
   for (;;) {
-    if (ABSL_PREDICT_FALSE(limit_pos() ==
-                           std::numeric_limits<Position>::max())) {
+    if (ABSL_PREDICT_FALSE(limit_pos() == kMaxPosition)) {
       return FailOverflow();
     }
     const size_t length_to_read = UnsignedMin(
-        max_length, std::numeric_limits<Position>::max() - limit_pos(),
+        max_length, kMaxPosition - limit_pos(),
         absl::bit_floor(size_t{std::numeric_limits<Py_ssize_t>::max()}));
     size_t length_read;
     if (!use_bytes_) {
diff --git a/python/riegeli/bytes/python_reader.h b/python/riegeli/bytes/python_reader.h
index e40a942..7fb4525 100644
--- a/python/riegeli/bytes/python_reader.h
+++ b/python/riegeli/bytes/python_reader.h
@@ -24,6 +24,7 @@
 
 #include <stddef.h>
 
+#include <limits>
 #include <optional>
 #include <utility>
 
@@ -136,6 +137,8 @@
   std::optional<Position> SizeImpl() override;
 
  private:
+  static constexpr Position kMaxPosition = std::numeric_limits<Position>::max();
+
   ABSL_ATTRIBUTE_COLD bool FailOperation(absl::string_view operation);
   std::optional<Position> SizeInternal();
 
diff --git a/python/riegeli/bytes/python_writer.cc b/python/riegeli/bytes/python_writer.cc
index f26a524..95ec7a1 100644
--- a/python/riegeli/bytes/python_writer.cc
+++ b/python/riegeli/bytes/python_writer.cc
@@ -129,8 +129,7 @@
          "nothing to write";
   RIEGELI_ASSERT_OK(*this)
       << "Failed precondition of BufferedWriter::WriteInternal()";
-  if (ABSL_PREDICT_FALSE(src.size() >
-                         std::numeric_limits<Position>::max() - start_pos())) {
+  if (ABSL_PREDICT_FALSE(src.size() > kMaxPosition - start_pos())) {
     return FailOverflow();
   }
   PythonLock lock;
diff --git a/python/riegeli/bytes/python_writer.h b/python/riegeli/bytes/python_writer.h
index 7f57062..e3a37b6 100644
--- a/python/riegeli/bytes/python_writer.h
+++ b/python/riegeli/bytes/python_writer.h
@@ -22,6 +22,7 @@
 #include <Python.h>
 // clang-format: do not reorder the above include.
 
+#include <limits>
 #include <optional>
 #include <utility>
 
@@ -129,6 +130,8 @@
   bool TruncateBehindBuffer(Position new_size) override;
 
  private:
+  static constexpr Position kMaxPosition = std::numeric_limits<Position>::max();
+
   ABSL_ATTRIBUTE_COLD bool FailOperation(absl::string_view operation);
   std::optional<Position> SizeInternal();
 
diff --git a/riegeli/brotli/brotli_reader.cc b/riegeli/brotli/brotli_reader.cc
index cea4f28..a1cfe47 100644
--- a/riegeli/brotli/brotli_reader.cc
+++ b/riegeli/brotli/brotli_reader.cc
@@ -17,7 +17,6 @@
 #include <stddef.h>
 #include <stdint.h>
 
-#include <limits>
 #include <memory>
 #include <utility>
 
@@ -153,8 +152,7 @@
         const char* const data = reinterpret_cast<const char*>(
             BrotliDecoderTakeOutput(decompressor_.get(), &length));
         if (length > 0) {
-          const Position max_length =
-              std::numeric_limits<Position>::max() - limit_pos();
+          const Position max_length = kMaxPosition - limit_pos();
           if (ABSL_PREDICT_FALSE(length > max_length)) {
             set_buffer(data, IntCast<size_t>(max_length));
             move_limit_pos(available());
diff --git a/riegeli/brotli/brotli_reader.h b/riegeli/brotli/brotli_reader.h
index 7b3813c..4a31ba5 100644
--- a/riegeli/brotli/brotli_reader.h
+++ b/riegeli/brotli/brotli_reader.h
@@ -17,6 +17,7 @@
 
 #include <stddef.h>
 
+#include <limits>
 #include <memory>
 #include <utility>
 
@@ -133,6 +134,8 @@
     }
   };
 
+  static constexpr Position kMaxPosition = std::numeric_limits<Position>::max();
+
   void InitializeDecompressor();
 
   BrotliDictionary dictionary_;
diff --git a/riegeli/brotli/brotli_writer.cc b/riegeli/brotli/brotli_writer.cc
index 7a158a2..9561ed5 100644
--- a/riegeli/brotli/brotli_writer.cc
+++ b/riegeli/brotli/brotli_writer.cc
@@ -17,7 +17,6 @@
 #include <stddef.h>
 #include <stdint.h>
 
-#include <limits>
 #include <memory>
 #include <optional>
 #include <utility>
@@ -163,8 +162,7 @@
                                             BrotliEncoderOperation op) {
   RIEGELI_ASSERT_OK(*this)
       << "Failed precondition of BrotliWriterBase::WriteInternal()";
-  if (ABSL_PREDICT_FALSE(src.size() >
-                         std::numeric_limits<Position>::max() - start_pos())) {
+  if (ABSL_PREDICT_FALSE(src.size() > kMaxPosition - start_pos())) {
     return FailOverflow();
   }
   size_t available_in = src.size();
diff --git a/riegeli/brotli/brotli_writer.h b/riegeli/brotli/brotli_writer.h
index a1737a4..1b50d36 100644
--- a/riegeli/brotli/brotli_writer.h
+++ b/riegeli/brotli/brotli_writer.h
@@ -15,6 +15,7 @@
 #ifndef RIEGELI_BROTLI_BROTLI_WRITER_H_
 #define RIEGELI_BROTLI_BROTLI_WRITER_H_
 
+#include <limits>
 #include <memory>
 #include <optional>
 #include <utility>
@@ -190,6 +191,8 @@
     }
   };
 
+  static constexpr Position kMaxPosition = std::numeric_limits<Position>::max();
+
   bool WriteInternal(absl::string_view src, Writer& dest,
                      BrotliEncoderOperation op);
 
diff --git a/riegeli/bytes/buffered_writer.cc b/riegeli/bytes/buffered_writer.cc
index 22df347..0c98bf0 100644
--- a/riegeli/bytes/buffered_writer.cc
+++ b/riegeli/bytes/buffered_writer.cc
@@ -17,7 +17,6 @@
 #include <stddef.h>
 
 #include <cstring>
-#include <limits>
 #include <optional>
 
 #include "absl/base/optimization.h"
@@ -82,13 +81,12 @@
          "enough space available, use Push() instead";
   if (ABSL_PREDICT_FALSE(!SyncBuffer())) return false;
   if (ABSL_PREDICT_FALSE(!ok())) return false;
-  if (ABSL_PREDICT_FALSE(min_length >
-                         std::numeric_limits<Position>::max() - start_pos())) {
+  if (ABSL_PREDICT_FALSE(min_length > kMaxPosition - start_pos())) {
     return FailOverflow();
   }
   const size_t buffer_length = UnsignedMin(
       buffer_sizer_.BufferLength(start_pos(), min_length, recommended_length),
-      std::numeric_limits<Position>::max() - start_pos());
+      kMaxPosition - start_pos());
   buffer_.Reset(buffer_length);
   set_buffer(buffer_.data(), buffer_length);
   return true;
diff --git a/riegeli/bytes/buffered_writer.h b/riegeli/bytes/buffered_writer.h
index 6efc59e..a8e97d1 100644
--- a/riegeli/bytes/buffered_writer.h
+++ b/riegeli/bytes/buffered_writer.h
@@ -17,6 +17,7 @@
 
 #include <stddef.h>
 
+#include <limits>
 #include <optional>
 #include <utility>
 
@@ -128,6 +129,8 @@
   Reader* ReadModeImpl(Position initial_pos) override;
 
  private:
+  static constexpr Position kMaxPosition = std::numeric_limits<Position>::max();
+
   // Writes `buffer_` to the destination. Sets buffer pointers to `nullptr`.
   bool SyncBuffer();
 
diff --git a/riegeli/bytes/cfile_reader.cc b/riegeli/bytes/cfile_reader.cc
index faf45f0..be45417 100644
--- a/riegeli/bytes/cfile_reader.cc
+++ b/riegeli/bytes/cfile_reader.cc
@@ -90,6 +90,9 @@
 
 }  // namespace
 
+const Position CFileReaderBase::kMaxPosition =
+    Position{std::numeric_limits<cfile_internal::Offset>::max()};
+
 void CFileReaderBase::Initialize(FILE* src, const Options& options) {
   RIEGELI_ASSERT_NE(src, nullptr)
       << "Failed precondition of CFileReader: null FILE pointer";
@@ -162,9 +165,7 @@
   }
 #endif  // _WIN32
   if (assumed_pos != std::nullopt) {
-    if (ABSL_PREDICT_FALSE(
-            *assumed_pos >
-            Position{std::numeric_limits<cfile_internal::Offset>::max()})) {
+    if (ABSL_PREDICT_FALSE(*assumed_pos > kMaxPosition)) {
       FailOverflow();
       return;
     }
@@ -305,15 +306,12 @@
       << "Failed precondition of BufferedReader::ReadInternal()";
   FILE* const src = SrcFile();
   for (;;) {
-    if (ABSL_PREDICT_FALSE(
-            limit_pos() >=
-            Position{std::numeric_limits<cfile_internal::Offset>::max()})) {
+    if (ABSL_PREDICT_FALSE(limit_pos() >= kMaxPosition)) {
       return FailOverflow();
     }
-    const size_t length_to_read = UnsignedMin(
-        UnsignedClamp(AvailableLength(src), min_length, max_length),
-        Position{std::numeric_limits<cfile_internal::Offset>::max()} -
-            limit_pos());
+    const size_t length_to_read =
+        UnsignedMin(UnsignedClamp(AvailableLength(src), min_length, max_length),
+                    kMaxPosition - limit_pos());
     const size_t length_read = fread(dest, 1, length_to_read, src);
     RIEGELI_ASSERT_LE(length_read, length_to_read)
         << "fread() read more than requested";
diff --git a/riegeli/bytes/cfile_reader.h b/riegeli/bytes/cfile_reader.h
index 6dd3c7d..b05beeb 100644
--- a/riegeli/bytes/cfile_reader.h
+++ b/riegeli/bytes/cfile_reader.h
@@ -225,6 +225,8 @@
   std::optional<Position> SizeImpl() override;
 
  private:
+  static const Position kMaxPosition;
+
   absl::Status FailedOperationStatus(absl::string_view operation);
 
   bool growing_source_ = false;
diff --git a/riegeli/bytes/cfile_writer.cc b/riegeli/bytes/cfile_writer.cc
index e32a3fc..1429605 100644
--- a/riegeli/bytes/cfile_writer.cc
+++ b/riegeli/bytes/cfile_writer.cc
@@ -62,6 +62,9 @@
 
 namespace riegeli {
 
+const Position CFileWriterBase::kMaxPosition =
+    Position{std::numeric_limits<cfile_internal::Offset>::max()};
+
 void CFileWriterBase::Initialize(FILE* dest, const Options& options) {
   RIEGELI_ASSERT_NE(dest, nullptr)
       << "Failed precondition of CFileReader: null FILE pointer";
@@ -140,9 +143,7 @@
   }
 #endif  // _WIN32
   if (assumed_pos != std::nullopt) {
-    if (ABSL_PREDICT_FALSE(
-            *assumed_pos >
-            Position{std::numeric_limits<cfile_internal::Offset>::max()})) {
+    if (ABSL_PREDICT_FALSE(*assumed_pos > kMaxPosition)) {
       FailOverflow();
       return;
     }
@@ -363,10 +364,7 @@
       << "Failed precondition of BufferedWriter::WriteInternal()";
   if (ABSL_PREDICT_FALSE(!WriteMode())) return false;
   FILE* const dest = DestFile();
-  if (ABSL_PREDICT_FALSE(
-          src.size() >
-          Position{std::numeric_limits<cfile_internal::Offset>::max()} -
-              start_pos())) {
+  if (ABSL_PREDICT_FALSE(src.size() > kMaxPosition - start_pos())) {
     return FailOverflow();
   }
   const size_t length_written = fwrite(src.data(), 1, src.size(), dest);
diff --git a/riegeli/bytes/cfile_writer.h b/riegeli/bytes/cfile_writer.h
index 65277da..7938143 100644
--- a/riegeli/bytes/cfile_writer.h
+++ b/riegeli/bytes/cfile_writer.h
@@ -308,6 +308,8 @@
   // Encodes a `bool` or a marker that the value is not resolved yet.
   enum class LazyBoolState : uint8_t { kUnknown, kTrue, kFalse };
 
+  static const Position kMaxPosition;
+
   absl::Status FailedOperationStatus(absl::string_view operation);
   // Lazily determined condition shared by `SupportsRandomAccess()` and
   // `SupportsReadMode()`.
diff --git a/riegeli/bytes/chain_backward_writer.cc b/riegeli/bytes/chain_backward_writer.cc
index b4078f6..644336d 100644
--- a/riegeli/bytes/chain_backward_writer.cc
+++ b/riegeli/bytes/chain_backward_writer.cc
@@ -16,7 +16,6 @@
 
 #include <stddef.h>
 
-#include <limits>
 #include <optional>
 #include <utility>
 
@@ -72,8 +71,8 @@
   RIEGELI_ASSERT_EQ(limit_pos(), dest.size())
       << "ChainBackwardWriter destination changed unexpectedly";
   SyncBuffer(dest);
-  if (ABSL_PREDICT_FALSE(min_length > std::numeric_limits<size_t>::max() -
-                                          IntCast<size_t>(start_pos()))) {
+  if (ABSL_PREDICT_FALSE(min_length >
+                         kMaxPosition - IntCast<size_t>(start_pos()))) {
     return FailOverflow();
   }
   MakeBuffer(dest, min_length, recommended_length);
@@ -89,8 +88,8 @@
   RIEGELI_ASSERT_EQ(limit_pos(), dest.size())
       << "ChainBackwardWriter destination changed unexpectedly";
   SyncBuffer(dest);
-  if (ABSL_PREDICT_FALSE(src.size() > std::numeric_limits<size_t>::max() -
-                                          IntCast<size_t>(start_pos()))) {
+  if (ABSL_PREDICT_FALSE(src.size() >
+                         kMaxPosition - IntCast<size_t>(start_pos()))) {
     return FailOverflow();
   }
   move_start_pos(src.size());
@@ -108,8 +107,8 @@
   RIEGELI_ASSERT_EQ(limit_pos(), dest.size())
       << "ChainBackwardWriter destination changed unexpectedly";
   SyncBuffer(dest);
-  if (ABSL_PREDICT_FALSE(src.size() > std::numeric_limits<size_t>::max() -
-                                          IntCast<size_t>(start_pos()))) {
+  if (ABSL_PREDICT_FALSE(src.size() >
+                         kMaxPosition - IntCast<size_t>(start_pos()))) {
     return FailOverflow();
   }
   move_start_pos(src.size());
@@ -127,8 +126,8 @@
   RIEGELI_ASSERT_EQ(limit_pos(), dest.size())
       << "ChainBackwardWriter destination changed unexpectedly";
   SyncBuffer(dest);
-  if (ABSL_PREDICT_FALSE(src.size() > std::numeric_limits<size_t>::max() -
-                                          IntCast<size_t>(start_pos()))) {
+  if (ABSL_PREDICT_FALSE(src.size() >
+                         kMaxPosition - IntCast<size_t>(start_pos()))) {
     return FailOverflow();
   }
   move_start_pos(src.size());
@@ -146,8 +145,8 @@
   RIEGELI_ASSERT_EQ(limit_pos(), dest.size())
       << "ChainBackwardWriter destination changed unexpectedly";
   SyncBuffer(dest);
-  if (ABSL_PREDICT_FALSE(src.size() > std::numeric_limits<size_t>::max() -
-                                          IntCast<size_t>(start_pos()))) {
+  if (ABSL_PREDICT_FALSE(src.size() >
+                         kMaxPosition - IntCast<size_t>(start_pos()))) {
     return FailOverflow();
   }
   move_start_pos(src.size());
@@ -165,8 +164,8 @@
   RIEGELI_ASSERT_EQ(limit_pos(), dest.size())
       << "ChainBackwardWriter destination changed unexpectedly";
   SyncBuffer(dest);
-  if (ABSL_PREDICT_FALSE(src.size() > std::numeric_limits<size_t>::max() -
-                                          IntCast<size_t>(start_pos()))) {
+  if (ABSL_PREDICT_FALSE(src.size() >
+                         kMaxPosition - IntCast<size_t>(start_pos()))) {
     return FailOverflow();
   }
   move_start_pos(src.size());
@@ -184,8 +183,8 @@
   RIEGELI_ASSERT_EQ(limit_pos(), dest.size())
       << "ChainBackwardWriter destination changed unexpectedly";
   SyncBuffer(dest);
-  if (ABSL_PREDICT_FALSE(src.size() > std::numeric_limits<size_t>::max() -
-                                          IntCast<size_t>(start_pos()))) {
+  if (ABSL_PREDICT_FALSE(src.size() >
+                         kMaxPosition - IntCast<size_t>(start_pos()))) {
     return FailOverflow();
   }
   move_start_pos(src.size());
diff --git a/riegeli/bytes/chain_backward_writer.h b/riegeli/bytes/chain_backward_writer.h
index 0114a1d..479c83c 100644
--- a/riegeli/bytes/chain_backward_writer.h
+++ b/riegeli/bytes/chain_backward_writer.h
@@ -18,6 +18,7 @@
 #include <stddef.h>
 #include <stdint.h>
 
+#include <limits>
 #include <optional>
 #include <type_traits>
 #include <utility>
@@ -152,6 +153,8 @@
   bool TruncateImpl(Position new_size) override;
 
  private:
+  static constexpr size_t kMaxPosition = std::numeric_limits<size_t>::max();
+
   // Discards uninitialized space from the beginning of `dest`, so that it
   // contains only actual data written.
   void SyncBuffer(Chain& dest);
diff --git a/riegeli/bytes/chain_writer.cc b/riegeli/bytes/chain_writer.cc
index 3009fb5..be4fdfe 100644
--- a/riegeli/bytes/chain_writer.cc
+++ b/riegeli/bytes/chain_writer.cc
@@ -16,7 +16,6 @@
 
 #include <stddef.h>
 
-#include <limits>
 #include <memory>
 #include <optional>
 #include <utility>
@@ -160,8 +159,8 @@
   RIEGELI_ASSERT_LE(limit_pos(), dest.size())
       << "ChainWriter destination changed unexpectedly";
   SyncBuffer(dest);
-  if (ABSL_PREDICT_FALSE(min_length > std::numeric_limits<size_t>::max() -
-                                          IntCast<size_t>(start_pos()))) {
+  if (ABSL_PREDICT_FALSE(min_length >
+                         kMaxPosition - IntCast<size_t>(start_pos()))) {
     return FailOverflow();
   }
   MakeBuffer(dest, min_length, recommended_length);
@@ -177,8 +176,8 @@
   RIEGELI_ASSERT_LE(limit_pos(), dest.size())
       << "ChainWriter destination changed unexpectedly";
   SyncBuffer(dest);
-  if (ABSL_PREDICT_FALSE(src.size() > std::numeric_limits<size_t>::max() -
-                                          IntCast<size_t>(start_pos()))) {
+  if (ABSL_PREDICT_FALSE(src.size() >
+                         kMaxPosition - IntCast<size_t>(start_pos()))) {
     return FailOverflow();
   }
   ShrinkTail(src.size());
@@ -197,8 +196,8 @@
   RIEGELI_ASSERT_LE(limit_pos(), dest.size())
       << "ChainWriter destination changed unexpectedly";
   SyncBuffer(dest);
-  if (ABSL_PREDICT_FALSE(src.size() > std::numeric_limits<size_t>::max() -
-                                          IntCast<size_t>(start_pos()))) {
+  if (ABSL_PREDICT_FALSE(src.size() >
+                         kMaxPosition - IntCast<size_t>(start_pos()))) {
     return FailOverflow();
   }
   ShrinkTail(src.size());
@@ -217,8 +216,8 @@
   RIEGELI_ASSERT_LE(limit_pos(), dest.size())
       << "ChainWriter destination changed unexpectedly";
   SyncBuffer(dest);
-  if (ABSL_PREDICT_FALSE(src.size() > std::numeric_limits<size_t>::max() -
-                                          IntCast<size_t>(start_pos()))) {
+  if (ABSL_PREDICT_FALSE(src.size() >
+                         kMaxPosition - IntCast<size_t>(start_pos()))) {
     return FailOverflow();
   }
   ShrinkTail(src.size());
@@ -237,8 +236,8 @@
   RIEGELI_ASSERT_LE(limit_pos(), dest.size())
       << "ChainWriter destination changed unexpectedly";
   SyncBuffer(dest);
-  if (ABSL_PREDICT_FALSE(src.size() > std::numeric_limits<size_t>::max() -
-                                          IntCast<size_t>(start_pos()))) {
+  if (ABSL_PREDICT_FALSE(src.size() >
+                         kMaxPosition - IntCast<size_t>(start_pos()))) {
     return FailOverflow();
   }
   ShrinkTail(src.size());
@@ -257,8 +256,8 @@
   RIEGELI_ASSERT_LE(limit_pos(), dest.size())
       << "ChainWriter destination changed unexpectedly";
   SyncBuffer(dest);
-  if (ABSL_PREDICT_FALSE(src.size() > std::numeric_limits<size_t>::max() -
-                                          IntCast<size_t>(start_pos()))) {
+  if (ABSL_PREDICT_FALSE(src.size() >
+                         kMaxPosition - IntCast<size_t>(start_pos()))) {
     return FailOverflow();
   }
   ShrinkTail(src.size());
@@ -277,8 +276,8 @@
   RIEGELI_ASSERT_LE(limit_pos(), dest.size())
       << "ChainWriter destination changed unexpectedly";
   SyncBuffer(dest);
-  if (ABSL_PREDICT_FALSE(src.size() > std::numeric_limits<size_t>::max() -
-                                          IntCast<size_t>(start_pos()))) {
+  if (ABSL_PREDICT_FALSE(src.size() >
+                         kMaxPosition - IntCast<size_t>(start_pos()))) {
     return FailOverflow();
   }
   ShrinkTail(IntCast<size_t>(src.size()));
diff --git a/riegeli/bytes/chain_writer.h b/riegeli/bytes/chain_writer.h
index 0740f1a..7a794b6 100644
--- a/riegeli/bytes/chain_writer.h
+++ b/riegeli/bytes/chain_writer.h
@@ -18,6 +18,7 @@
 #include <stddef.h>
 #include <stdint.h>
 
+#include <limits>
 #include <memory>
 #include <optional>
 #include <type_traits>
@@ -164,6 +165,8 @@
   Reader* ReadModeImpl(Position initial_pos) override;
 
  private:
+  static constexpr size_t kMaxPosition = std::numeric_limits<size_t>::max();
+
   // Discards uninitialized space from the end of `dest`, so that it contains
   // only actual data written. Ensures that data which follow the current
   // position are separated in `*tail_`.
diff --git a/riegeli/bytes/cord_backward_writer.cc b/riegeli/bytes/cord_backward_writer.cc
index 5032a78..4f7b6e7 100644
--- a/riegeli/bytes/cord_backward_writer.cc
+++ b/riegeli/bytes/cord_backward_writer.cc
@@ -16,7 +16,6 @@
 
 #include <stddef.h>
 
-#include <limits>
 #include <optional>
 #include <utility>
 
@@ -109,8 +108,7 @@
   absl::Cord& dest = *DestCord();
   RIEGELI_ASSERT_EQ(start_pos(), dest.size())
       << "CordBackwardWriter destination changed unexpectedly";
-  if (ABSL_PREDICT_FALSE(min_length > std::numeric_limits<size_t>::max() -
-                                          IntCast<size_t>(pos()))) {
+  if (ABSL_PREDICT_FALSE(min_length > kMaxPosition - IntCast<size_t>(pos()))) {
     return FailOverflow();
   }
   if (start_to_cursor() >= min_block_size_) SyncBuffer(dest);
@@ -140,9 +138,8 @@
         // The size prediction turned out to be wrong, and the actual size is
         // insufficient even for what is required. Ignore `new_cord_buffer`.
       } else {
-        new_cord_buffer.SetLength(
-            UnsignedMin(new_cord_buffer.capacity(),
-                        std::numeric_limits<size_t>::max() - dest.size()));
+        new_cord_buffer.SetLength(UnsignedMin(new_cord_buffer.capacity(),
+                                              kMaxPosition - dest.size()));
         riegeli::null_safe_memcpy(
             new_cord_buffer.data() + new_cord_buffer.length() - cursor_index,
             cursor(), cursor_index);
@@ -159,8 +156,8 @@
   Buffer new_buffer = buffer_.capacity() >= buffer_length
                           ? std::move(buffer_)
                           : Buffer(buffer_length);
-  const size_t length = UnsignedMin(
-      new_buffer.capacity(), std::numeric_limits<size_t>::max() - dest.size());
+  const size_t length =
+      UnsignedMin(new_buffer.capacity(), kMaxPosition - dest.size());
   riegeli::null_safe_memcpy(new_buffer.data() + length - cursor_index, cursor(),
                             cursor_index);
   buffer_ = std::move(new_buffer);
@@ -180,8 +177,8 @@
   RIEGELI_ASSERT_EQ(start_pos(), dest.size())
       << "CordBackwardWriter destination changed unexpectedly";
   SyncBuffer(dest);
-  if (ABSL_PREDICT_FALSE(src.size() > std::numeric_limits<size_t>::max() -
-                                          IntCast<size_t>(start_pos()))) {
+  if (ABSL_PREDICT_FALSE(src.size() >
+                         kMaxPosition - IntCast<size_t>(start_pos()))) {
     return FailOverflow();
   }
   move_start_pos(src.size());
@@ -199,8 +196,8 @@
   RIEGELI_ASSERT_EQ(start_pos(), dest.size())
       << "CordBackwardWriter destination changed unexpectedly";
   SyncBuffer(dest);
-  if (ABSL_PREDICT_FALSE(src.size() > std::numeric_limits<size_t>::max() -
-                                          IntCast<size_t>(start_pos()))) {
+  if (ABSL_PREDICT_FALSE(src.size() >
+                         kMaxPosition - IntCast<size_t>(start_pos()))) {
     return FailOverflow();
   }
   move_start_pos(src.size());
@@ -224,8 +221,8 @@
   RIEGELI_ASSERT_EQ(start_pos(), dest.size())
       << "CordBackwardWriter destination changed unexpectedly";
   SyncBuffer(dest);
-  if (ABSL_PREDICT_FALSE(src.size() > std::numeric_limits<size_t>::max() -
-                                          IntCast<size_t>(start_pos()))) {
+  if (ABSL_PREDICT_FALSE(src.size() >
+                         kMaxPosition - IntCast<size_t>(start_pos()))) {
     return FailOverflow();
   }
   move_start_pos(src.size());
@@ -243,8 +240,8 @@
   RIEGELI_ASSERT_EQ(start_pos(), dest.size())
       << "CordBackwardWriter destination changed unexpectedly";
   SyncBuffer(dest);
-  if (ABSL_PREDICT_FALSE(src.size() > std::numeric_limits<size_t>::max() -
-                                          IntCast<size_t>(start_pos()))) {
+  if (ABSL_PREDICT_FALSE(src.size() >
+                         kMaxPosition - IntCast<size_t>(start_pos()))) {
     return FailOverflow();
   }
   move_start_pos(src.size());
@@ -268,8 +265,8 @@
   RIEGELI_ASSERT_EQ(start_pos(), dest.size())
       << "CordBackwardWriter destination changed unexpectedly";
   SyncBuffer(dest);
-  if (ABSL_PREDICT_FALSE(src.size() > std::numeric_limits<size_t>::max() -
-                                          IntCast<size_t>(start_pos()))) {
+  if (ABSL_PREDICT_FALSE(src.size() >
+                         kMaxPosition - IntCast<size_t>(start_pos()))) {
     return FailOverflow();
   }
   move_start_pos(src.size());
@@ -287,8 +284,8 @@
   RIEGELI_ASSERT_EQ(start_pos(), dest.size())
       << "CordBackwardWriter destination changed unexpectedly";
   SyncBuffer(dest);
-  if (ABSL_PREDICT_FALSE(src.size() > std::numeric_limits<size_t>::max() -
-                                          IntCast<size_t>(start_pos()))) {
+  if (ABSL_PREDICT_FALSE(src.size() >
+                         kMaxPosition - IntCast<size_t>(start_pos()))) {
     return FailOverflow();
   }
   move_start_pos(src.size());
diff --git a/riegeli/bytes/cord_backward_writer.h b/riegeli/bytes/cord_backward_writer.h
index d2b3b7d..336a02e 100644
--- a/riegeli/bytes/cord_backward_writer.h
+++ b/riegeli/bytes/cord_backward_writer.h
@@ -18,6 +18,7 @@
 #include <stddef.h>
 #include <stdint.h>
 
+#include <limits>
 #include <optional>
 #include <type_traits>
 #include <utility>
@@ -153,6 +154,8 @@
   bool TruncateImpl(Position new_size) override;
 
  private:
+  static constexpr size_t kMaxPosition = std::numeric_limits<size_t>::max();
+
   // When deciding whether to copy an array of bytes or share memory, prefer
   // copying up to this length.
   size_t MaxBytesToCopy() const;
diff --git a/riegeli/bytes/cord_writer.cc b/riegeli/bytes/cord_writer.cc
index 79230b1..1c26643 100644
--- a/riegeli/bytes/cord_writer.cc
+++ b/riegeli/bytes/cord_writer.cc
@@ -16,7 +16,6 @@
 
 #include <stddef.h>
 
-#include <limits>
 #include <memory>
 #include <optional>
 #include <utility>
@@ -174,8 +173,7 @@
       return true;
     }
   }
-  if (ABSL_PREDICT_FALSE(min_length > std::numeric_limits<size_t>::max() -
-                                          IntCast<size_t>(pos()))) {
+  if (ABSL_PREDICT_FALSE(min_length > kMaxPosition - IntCast<size_t>(pos()))) {
     return FailOverflow();
   }
   if (start_to_cursor() >= min_block_size_) SyncBuffer(dest);
@@ -205,9 +203,8 @@
         // The size prediction turned out to be wrong, and the actual size is
         // insufficient even for what is required. Ignore `new_cord_buffer`.
       } else {
-        new_cord_buffer.SetLength(
-            UnsignedMin(new_cord_buffer.capacity(),
-                        std::numeric_limits<size_t>::max() - dest.size()));
+        new_cord_buffer.SetLength(UnsignedMin(new_cord_buffer.capacity(),
+                                              kMaxPosition - dest.size()));
         riegeli::null_safe_memcpy(new_cord_buffer.data(), start(),
                                   cursor_index);
         cord_buffer_ = std::move(new_cord_buffer);
@@ -226,8 +223,7 @@
   riegeli::null_safe_memcpy(new_buffer.data(), start(), cursor_index);
   buffer_ = std::move(new_buffer);
   set_buffer(buffer_.data(),
-             UnsignedMin(buffer_.capacity(),
-                         std::numeric_limits<size_t>::max() - dest.size()),
+             UnsignedMin(buffer_.capacity(), kMaxPosition - dest.size()),
              cursor_index);
   return true;
 }
@@ -242,8 +238,8 @@
   RIEGELI_ASSERT_LE(start_pos(), dest.size())
       << "CordWriter destination changed unexpectedly";
   SyncBuffer(dest);
-  if (ABSL_PREDICT_FALSE(src.size() > std::numeric_limits<size_t>::max() -
-                                          IntCast<size_t>(start_pos()))) {
+  if (ABSL_PREDICT_FALSE(src.size() >
+                         kMaxPosition - IntCast<size_t>(start_pos()))) {
     return FailOverflow();
   }
   ShrinkTail(src.size());
@@ -262,8 +258,8 @@
   RIEGELI_ASSERT_LE(start_pos(), dest.size())
       << "CordWriter destination changed unexpectedly";
   SyncBuffer(dest);
-  if (ABSL_PREDICT_FALSE(src.size() > std::numeric_limits<size_t>::max() -
-                                          IntCast<size_t>(start_pos()))) {
+  if (ABSL_PREDICT_FALSE(src.size() >
+                         kMaxPosition - IntCast<size_t>(start_pos()))) {
     return FailOverflow();
   }
   ShrinkTail(src.size());
@@ -287,8 +283,8 @@
   RIEGELI_ASSERT_LE(start_pos(), dest.size())
       << "CordWriter destination changed unexpectedly";
   SyncBuffer(dest);
-  if (ABSL_PREDICT_FALSE(src.size() > std::numeric_limits<size_t>::max() -
-                                          IntCast<size_t>(start_pos()))) {
+  if (ABSL_PREDICT_FALSE(src.size() >
+                         kMaxPosition - IntCast<size_t>(start_pos()))) {
     return FailOverflow();
   }
   ShrinkTail(src.size());
@@ -307,8 +303,8 @@
   RIEGELI_ASSERT_LE(start_pos(), dest.size())
       << "CordWriter destination changed unexpectedly";
   SyncBuffer(dest);
-  if (ABSL_PREDICT_FALSE(src.size() > std::numeric_limits<size_t>::max() -
-                                          IntCast<size_t>(start_pos()))) {
+  if (ABSL_PREDICT_FALSE(src.size() >
+                         kMaxPosition - IntCast<size_t>(start_pos()))) {
     return FailOverflow();
   }
   ShrinkTail(src.size());
@@ -332,8 +328,8 @@
   RIEGELI_ASSERT_LE(start_pos(), dest.size())
       << "CordWriter destination changed unexpectedly";
   SyncBuffer(dest);
-  if (ABSL_PREDICT_FALSE(src.size() > std::numeric_limits<size_t>::max() -
-                                          IntCast<size_t>(start_pos()))) {
+  if (ABSL_PREDICT_FALSE(src.size() >
+                         kMaxPosition - IntCast<size_t>(start_pos()))) {
     return FailOverflow();
   }
   ShrinkTail(src.size());
@@ -352,8 +348,8 @@
   RIEGELI_ASSERT_LE(start_pos(), dest.size())
       << "CordWriter destination changed unexpectedly";
   SyncBuffer(dest);
-  if (ABSL_PREDICT_FALSE(src.size() > std::numeric_limits<size_t>::max() -
-                                          IntCast<size_t>(start_pos()))) {
+  if (ABSL_PREDICT_FALSE(src.size() >
+                         kMaxPosition - IntCast<size_t>(start_pos()))) {
     return FailOverflow();
   }
   ShrinkTail(IntCast<size_t>(src.size()));
diff --git a/riegeli/bytes/cord_writer.h b/riegeli/bytes/cord_writer.h
index af62234..e443d62 100644
--- a/riegeli/bytes/cord_writer.h
+++ b/riegeli/bytes/cord_writer.h
@@ -166,6 +166,8 @@
   Reader* ReadModeImpl(Position initial_pos) override;
 
  private:
+  static constexpr size_t kMaxPosition = std::numeric_limits<size_t>::max();
+
   // When deciding whether to copy an array of bytes or share memory, prefer
   // copying up to this length.
   size_t MaxBytesToCopy() const;
@@ -376,8 +378,7 @@
     const size_t existing_length = cord_buffer_.length();
     if (existing_length > 0) {
       cord_buffer_.SetLength(
-          UnsignedMin(cord_buffer_.capacity(),
-                      std::numeric_limits<size_t>::max() - dest->size()));
+          UnsignedMin(cord_buffer_.capacity(), kMaxPosition - dest->size()));
       set_buffer(cord_buffer_.data(), cord_buffer_.length(), existing_length);
     }
   } else {
diff --git a/riegeli/bytes/fd_reader.cc b/riegeli/bytes/fd_reader.cc
index bcb3e0a..ce149e8 100644
--- a/riegeli/bytes/fd_reader.cc
+++ b/riegeli/bytes/fd_reader.cc
@@ -160,6 +160,9 @@
 
 #endif
 
+const Position FdReaderBase::kMaxPosition =
+    Position{std::numeric_limits<fd_internal::Offset>::max()};
+
 void FdReaderBase::Initialize(int src, const Options& options) {
   RIEGELI_ASSERT_GE(src, 0)
       << "Failed precondition of FdReader: negative file descriptor";
@@ -233,9 +236,7 @@
           "must not be both set"));
       return;
     }
-    if (ABSL_PREDICT_FALSE(
-            *assumed_pos >
-            Position{std::numeric_limits<fd_internal::Offset>::max()})) {
+    if (ABSL_PREDICT_FALSE(*assumed_pos > kMaxPosition)) {
       FailOverflow();
       return;
     }
@@ -247,9 +248,7 @@
     });
   } else if (options.independent_pos() != std::nullopt) {
     has_independent_pos_ = true;
-    if (ABSL_PREDICT_FALSE(
-            *options.independent_pos() >
-            Position{std::numeric_limits<fd_internal::Offset>::max()})) {
+    if (ABSL_PREDICT_FALSE(*options.independent_pos() > kMaxPosition)) {
       FailOverflow();
       return;
     }
@@ -399,15 +398,12 @@
       << "Failed precondition of BufferedReader::ReadInternal()";
   const int src = SrcFd();
   for (;;) {
-    if (ABSL_PREDICT_FALSE(
-            limit_pos() >=
-            Position{std::numeric_limits<fd_internal::Offset>::max()})) {
+    if (ABSL_PREDICT_FALSE(limit_pos() >= kMaxPosition)) {
       return FailOverflow();
     }
 #ifndef _WIN32
     const size_t length_to_read = UnsignedMin(
-        max_length,
-        Position{std::numeric_limits<fd_internal::Offset>::max()} - limit_pos(),
+        max_length, kMaxPosition - limit_pos(),
         absl::bit_floor(size_t{std::numeric_limits<ssize_t>::max()}),
         // Darwin and FreeBSD cannot read more than 2 GB - 1 at a time.
         // Limit to 1 GB for better alignment of reads.
@@ -431,11 +427,9 @@
                              file_handle == reinterpret_cast<HANDLE>(-2))) {
         return FailWindowsOperation("_get_osfhandle()");
       }
-      length_to_read = UnsignedMin(
-          max_length,
-          Position{std::numeric_limits<fd_internal::Offset>::max()} -
-              limit_pos(),
-          absl::bit_floor(std::numeric_limits<DWORD>::max()));
+      length_to_read =
+          UnsignedMin(max_length, kMaxPosition - limit_pos(),
+                      absl::bit_floor(std::numeric_limits<DWORD>::max()));
       OVERLAPPED overlapped{};
       overlapped.Offset = IntCast<DWORD>(limit_pos() & 0xffffffff);
       overlapped.OffsetHigh = IntCast<DWORD>(limit_pos() >> 32);
@@ -446,9 +440,7 @@
       }
     } else {
       length_to_read = UnsignedMin(
-          max_length,
-          Position{std::numeric_limits<fd_internal::Offset>::max()} -
-              limit_pos(),
+          max_length, kMaxPosition - limit_pos(),
           absl::bit_floor(unsigned{std::numeric_limits<int>::max()}));
       const int length_read_int =
           _read(src, dest, IntCast<unsigned>(length_to_read));
@@ -496,20 +488,14 @@
         const int dest_fd = fd_writer->DestFd();
         fd_internal::Offset src_offset = limit_pos();
         fd_internal::Offset dest_offset = fd_writer->start_pos();
-        if (ABSL_PREDICT_FALSE(
-                limit_pos() >=
-                Position{std::numeric_limits<fd_internal::Offset>::max()})) {
+        if (ABSL_PREDICT_FALSE(limit_pos() >= kMaxPosition)) {
           return FailOverflow();
         }
         const size_t length_to_copy = UnsignedMin(
-            length,
-            Position{std::numeric_limits<fd_internal::Offset>::max()} -
-                limit_pos(),
+            length, kMaxPosition - limit_pos(),
             absl::bit_floor(size_t{std::numeric_limits<ssize_t>::max()}));
-        if (ABSL_PREDICT_FALSE(
-                length_to_copy >
-                Position{std::numeric_limits<fd_internal::Offset>::max()} -
-                    fd_writer->start_pos())) {
+        if (ABSL_PREDICT_FALSE(length_to_copy >
+                               kMaxPosition - fd_writer->start_pos())) {
           return fd_writer->FailOverflow();
         }
       again:
diff --git a/riegeli/bytes/fd_reader.h b/riegeli/bytes/fd_reader.h
index a5c79d0..747457b 100644
--- a/riegeli/bytes/fd_reader.h
+++ b/riegeli/bytes/fd_reader.h
@@ -273,6 +273,8 @@
   std::unique_ptr<Reader> NewReaderCurrentPosImpl() override;
 
  private:
+  static const Position kMaxPosition;
+
   absl::Status FailedOperationStatus(absl::string_view operation);
 
   bool SeekInternal(int src, Position new_pos);
diff --git a/riegeli/bytes/fd_writer.cc b/riegeli/bytes/fd_writer.cc
index 4666d65..f8488cb 100644
--- a/riegeli/bytes/fd_writer.cc
+++ b/riegeli/bytes/fd_writer.cc
@@ -75,6 +75,9 @@
 
 namespace riegeli {
 
+const Position FdWriterBase::kMaxPosition =
+    Position{std::numeric_limits<fd_internal::Offset>::max()};
+
 TypeId FdWriterBase::GetTypeId() const { return TypeId::For<FdWriterBase>(); }
 
 void FdWriterBase::Initialize(int dest, const Options& options) {
@@ -171,9 +174,7 @@
           "must not be both set"));
       return;
     }
-    if (ABSL_PREDICT_FALSE(
-            *assumed_pos >
-            Position{std::numeric_limits<fd_internal::Offset>::max()})) {
+    if (ABSL_PREDICT_FALSE(*assumed_pos > kMaxPosition)) {
       FailOverflow();
       return;
     }
@@ -193,9 +194,7 @@
       return;
     }
     has_independent_pos_ = true;
-    if (ABSL_PREDICT_FALSE(
-            *options.independent_pos() >
-            Position{std::numeric_limits<fd_internal::Offset>::max()})) {
+    if (ABSL_PREDICT_FALSE(*options.independent_pos() > kMaxPosition)) {
       FailOverflow();
       return;
     }
@@ -443,10 +442,7 @@
       << "Failed precondition of BufferedWriter::WriteInternal()";
   if (ABSL_PREDICT_FALSE(!WriteMode())) return false;
   const int dest = DestFd();
-  if (ABSL_PREDICT_FALSE(
-          src.size() >
-          Position{std::numeric_limits<fd_internal::Offset>::max()} -
-              start_pos())) {
+  if (ABSL_PREDICT_FALSE(src.size() > kMaxPosition - start_pos())) {
     return FailOverflow();
   }
   do {
@@ -529,10 +525,7 @@
   if (ABSL_PREDICT_FALSE(size == std::nullopt)) return false;
   RIEGELI_ASSERT_EQ(start_to_limit(), 0u)
       << "BufferedWriter::SizeImpl() flushes the buffer";
-  if (ABSL_PREDICT_FALSE(
-          src.size() >
-          Position{std::numeric_limits<fd_internal::Offset>::max()} -
-              start_pos())) {
+  if (ABSL_PREDICT_FALSE(src.size() > kMaxPosition - start_pos())) {
     return FailOverflow();
   }
   const Position new_pos = start_pos() + src.size();
diff --git a/riegeli/bytes/fd_writer.h b/riegeli/bytes/fd_writer.h
index 7725cf2..67fe613 100644
--- a/riegeli/bytes/fd_writer.h
+++ b/riegeli/bytes/fd_writer.h
@@ -409,6 +409,8 @@
   // Encodes a `bool` or a marker that the value is not resolved yet.
   enum class LazyBoolState : uint8_t { kUnknown, kTrue, kFalse };
 
+  static const Position kMaxPosition;
+
   absl::Status FailedOperationStatus(absl::string_view operation);
 #ifdef _WIN32
   absl::Status FailedWindowsOperationStatus(absl::string_view operation);
diff --git a/riegeli/bytes/istream_reader.cc b/riegeli/bytes/istream_reader.cc
index 6c5fe3e..5260b87 100644
--- a/riegeli/bytes/istream_reader.cc
+++ b/riegeli/bytes/istream_reader.cc
@@ -19,7 +19,6 @@
 #include <cerrno>
 #include <ios>
 #include <istream>
-#include <limits>
 #include <optional>
 #include <string>
 
@@ -55,9 +54,7 @@
   // `std::istream::peek()` and `std::istream::tellg()`.
   src->clear(src->rdstate() & ~std::ios_base::eofbit);
   if (assumed_pos != std::nullopt) {
-    if (ABSL_PREDICT_FALSE(
-            *assumed_pos >
-            Position{std::numeric_limits<std::streamoff>::max()})) {
+    if (ABSL_PREDICT_FALSE(*assumed_pos > kMaxPosition)) {
       FailOverflow();
       return;
     }
@@ -184,18 +181,13 @@
   std::istream& src = *SrcStream();
   errno = 0;
   for (;;) {
-    if (ABSL_PREDICT_FALSE(
-            limit_pos() >=
-            Position{std::numeric_limits<std::streamoff>::max()})) {
+    if (ABSL_PREDICT_FALSE(limit_pos() >= kMaxPosition)) {
       return FailOverflow();
     }
-    std::streamsize length_to_read = IntCast<std::streamsize>(UnsignedMin(
-        min_length,
-        Position{std::numeric_limits<std::streamoff>::max()} - limit_pos()));
-    const std::streamsize max_length_to_read =
-        IntCast<std::streamsize>(UnsignedMin(
-            max_length, Position{std::numeric_limits<std::streamoff>::max()} -
-                            limit_pos()));
+    std::streamsize length_to_read = IntCast<std::streamsize>(
+        UnsignedMin(min_length, kMaxPosition - limit_pos()));
+    const std::streamsize max_length_to_read = IntCast<std::streamsize>(
+        UnsignedMin(max_length, kMaxPosition - limit_pos()));
     std::streamsize length_read;
     if (length_to_read < max_length_to_read) {
       // Use `std::istream::readsome()` to read as much data as is available,
diff --git a/riegeli/bytes/istream_reader.h b/riegeli/bytes/istream_reader.h
index 6c6e03b..d853a77 100644
--- a/riegeli/bytes/istream_reader.h
+++ b/riegeli/bytes/istream_reader.h
@@ -18,7 +18,9 @@
 #include <stddef.h>
 
 #include <cerrno>
+#include <ios>
 #include <istream>
+#include <limits>
 #include <optional>
 #include <utility>
 
@@ -118,6 +120,9 @@
   std::optional<Position> SizeImpl() override;
 
  private:
+  static constexpr Position kMaxPosition =
+      std::numeric_limits<std::streamoff>::max();
+
   absl::Status FailedOperationStatus(absl::string_view operation);
 
   bool growing_source_ = false;
diff --git a/riegeli/bytes/joining_reader.cc b/riegeli/bytes/joining_reader.cc
index 595eacd..c9a68f2 100644
--- a/riegeli/bytes/joining_reader.cc
+++ b/riegeli/bytes/joining_reader.cc
@@ -169,7 +169,7 @@
     if (ABSL_PREDICT_FALSE(!OpenShardInternal())) return false;
     shard = ShardReader();
   }
-  if (ABSL_PREDICT_FALSE(limit_pos() == std::numeric_limits<Position>::max())) {
+  if (ABSL_PREDICT_FALSE(limit_pos() == kMaxPosition)) {
     return FailOverflow();
   }
   MakeBuffer(*shard);
@@ -193,7 +193,7 @@
   }
   for (;;) {
     const size_t length_to_read =
-        UnsignedMin(length, std::numeric_limits<Position>::max() - limit_pos());
+        UnsignedMin(length, kMaxPosition - limit_pos());
     size_t length_read;
     const bool read_ok = shard->Read(length_to_read, dest, &length_read);
     move_limit_pos(length_read);
@@ -252,7 +252,7 @@
   }
   for (;;) {
     const size_t length_to_read =
-        UnsignedMin(length, std::numeric_limits<Position>::max() - limit_pos());
+        UnsignedMin(length, kMaxPosition - limit_pos());
     size_t length_read;
     const bool read_ok =
         shard->ReadAndAppend(length_to_read, dest, &length_read);
@@ -290,7 +290,7 @@
   }
   for (;;) {
     const size_t length_to_read =
-        UnsignedMin(length, std::numeric_limits<Position>::max() - limit_pos());
+        UnsignedMin(length, kMaxPosition - limit_pos());
     Position length_read;
     const bool copy_ok = shard->Copy(length_to_read, dest, &length_read);
     move_limit_pos(length_read);
@@ -332,7 +332,7 @@
     if (ABSL_PREDICT_FALSE(!OpenShardInternal())) return false;
     shard = ShardReader();
   }
-  const Position remaining = std::numeric_limits<Position>::max() - limit_pos();
+  const Position remaining = kMaxPosition - limit_pos();
   if (ABSL_PREDICT_FALSE(remaining == 0)) return FailOverflow();
   max_length = UnsignedMin(max_length, remaining);
   for (;;) {
@@ -373,7 +373,7 @@
     if (ABSL_PREDICT_FALSE(!OpenShardInternal())) return false;
     shard = ShardReader();
   }
-  const Position remaining = std::numeric_limits<Position>::max() - limit_pos();
+  const Position remaining = kMaxPosition - limit_pos();
   if (ABSL_PREDICT_FALSE(remaining == 0)) return FailOverflow();
   max_length = UnsignedMin(max_length, remaining);
   for (;;) {
diff --git a/riegeli/bytes/joining_reader.h b/riegeli/bytes/joining_reader.h
index 5214968..3055617 100644
--- a/riegeli/bytes/joining_reader.h
+++ b/riegeli/bytes/joining_reader.h
@@ -150,6 +150,8 @@
                              size_t recommended_length) override;
 
  private:
+  static constexpr Position kMaxPosition = std::numeric_limits<Position>::max();
+
   bool OpenShardInternal();
   bool CloseShardInternal();
 
@@ -252,8 +254,7 @@
       << "Failed precondition of JoiningReaderBase::MakeBuffer(): "
          "shard is closed";
   set_buffer(shard.cursor(),
-             UnsignedMin(shard.available(),
-                         std::numeric_limits<Position>::max() - limit_pos()));
+             UnsignedMin(shard.available(), kMaxPosition - limit_pos()));
   move_limit_pos(available());
   if (ABSL_PREDICT_FALSE(!shard.ok())) {
     FailWithoutAnnotation(AnnotateOverShard(shard.status()));
diff --git a/riegeli/bytes/limiting_backward_writer.cc b/riegeli/bytes/limiting_backward_writer.cc
index 562f3e8..7d82f01 100644
--- a/riegeli/bytes/limiting_backward_writer.cc
+++ b/riegeli/bytes/limiting_backward_writer.cc
@@ -16,7 +16,6 @@
 
 #include <stddef.h>
 
-#include <limits>
 #include <optional>
 #include <utility>
 
@@ -68,10 +67,9 @@
 }
 
 void LimitingBackwardWriterBase::set_max_length(Position max_length) {
-  if (ABSL_PREDICT_FALSE(max_length >
-                         std::numeric_limits<Position>::max() - pos())) {
+  if (ABSL_PREDICT_FALSE(max_length > kMaxPosition - pos())) {
     if (exact_) FailLengthOverflow(max_length);
-    max_pos_ = std::numeric_limits<Position>::max();
+    max_pos_ = kMaxPosition;
     return;
   }
   set_max_pos(pos() + max_length);
diff --git a/riegeli/bytes/limiting_backward_writer.h b/riegeli/bytes/limiting_backward_writer.h
index 18acf31..12d8f24 100644
--- a/riegeli/bytes/limiting_backward_writer.h
+++ b/riegeli/bytes/limiting_backward_writer.h
@@ -148,7 +148,7 @@
   Position max_length() const { return SaturatingSub(max_pos_, pos()); }
 
   // Clears the limit.
-  void clear_limit() { max_pos_ = std::numeric_limits<Position>::max(); }
+  void clear_limit() { max_pos_ = kMaxPosition; }
 
   bool SupportsTruncate() override;
 
@@ -190,6 +190,8 @@
   bool TruncateImpl(Position new_size) override;
 
  private:
+  static constexpr Position kMaxPosition = std::numeric_limits<Position>::max();
+
   ABSL_ATTRIBUTE_COLD bool FailLimitExceeded();
   ABSL_ATTRIBUTE_COLD bool FailLimitExceeded(BackwardWriter& dest);
   ABSL_ATTRIBUTE_COLD void FailLengthOverflow(Position max_length);
@@ -199,7 +201,7 @@
   bool WriteInternal(Src&& src, RemovePrefix&& remove_prefix);
 
   // Invariant: `start_pos() <= max_pos_`
-  Position max_pos_ = std::numeric_limits<Position>::max();
+  Position max_pos_ = kMaxPosition;
 
   bool exact_ = false;
 
@@ -299,13 +301,13 @@
 
 inline void LimitingBackwardWriterBase::Reset(Closed) {
   BackwardWriter::Reset(kClosed);
-  max_pos_ = std::numeric_limits<Position>::max();
+  max_pos_ = kMaxPosition;
   exact_ = false;
 }
 
 inline void LimitingBackwardWriterBase::Reset(bool exact) {
   BackwardWriter::Reset();
-  max_pos_ = std::numeric_limits<Position>::max();
+  max_pos_ = kMaxPosition;
   exact_ = exact;
 }
 
diff --git a/riegeli/bytes/limiting_reader.cc b/riegeli/bytes/limiting_reader.cc
index dd1f421..c7448d9 100644
--- a/riegeli/bytes/limiting_reader.cc
+++ b/riegeli/bytes/limiting_reader.cc
@@ -82,7 +82,7 @@
 
 inline bool LimitingReaderBase::FailNotEnough() {
   return Fail(absl::InvalidArgumentError(
-      max_pos() == std::numeric_limits<Position>::max()
+      max_pos() == kMaxPosition
           ? "Not enough data: expected impossibly much"
           : absl::StrCat("Not enough data: expected at least ", max_pos(),
                          " or ", max_length(), " more")));
diff --git a/riegeli/bytes/limiting_reader.h b/riegeli/bytes/limiting_reader.h
index 951b3fd..4ab6b4b 100644
--- a/riegeli/bytes/limiting_reader.h
+++ b/riegeli/bytes/limiting_reader.h
@@ -180,7 +180,7 @@
   Position max_length() const;
 
   // Clears the limit.
-  void clear_limit() { max_pos_ = std::numeric_limits<Position>::max(); }
+  void clear_limit() { max_pos_ = kMaxPosition; }
 
   // Accesses the exactness setting.
   //
@@ -257,6 +257,8 @@
   std::unique_ptr<Reader> NewReaderImpl(Position initial_pos) override;
 
  private:
+  static constexpr Position kMaxPosition = std::numeric_limits<Position>::max();
+
   // For `FailNotEnoughAtPos()`, `FailNotEnoughAtLength()`,
   // `FailNotEnoughAtEnd()`, and `FailPositionLimitExceeded()`.
   friend class ScopedLimiter;
@@ -278,7 +280,7 @@
   bool ReadInternal(size_t length, Dest& dest);
 
   // Invariant: `pos() <= max_pos_`
-  Position max_pos_ = std::numeric_limits<Position>::max();
+  Position max_pos_ = kMaxPosition;
 
   bool exact_ = false;
   bool fail_if_longer_ = false;
@@ -592,14 +594,14 @@
 
 inline void LimitingReaderBase::Reset(Closed) {
   Reader::Reset(kClosed);
-  max_pos_ = std::numeric_limits<Position>::max();
+  max_pos_ = kMaxPosition;
   exact_ = false;
   fail_if_longer_ = false;
 }
 
 inline void LimitingReaderBase::Reset(bool exact, bool fail_if_longer) {
   Reader::Reset();
-  max_pos_ = std::numeric_limits<Position>::max();
+  max_pos_ = kMaxPosition;
   exact_ = exact;
   fail_if_longer_ = fail_if_longer;
 }
@@ -626,7 +628,7 @@
 inline void LimitingReaderBase::set_max_length(Position max_length) {
   max_pos_ = pos() + max_length;  // Wrap-around is not an error.
   if (ABSL_PREDICT_FALSE(max_pos_ < max_length)) {
-    max_pos_ = std::numeric_limits<Position>::max();
+    max_pos_ = kMaxPosition;
     if (exact_) FailLengthOverflow(max_length);
     return;
   }
diff --git a/riegeli/bytes/limiting_writer.cc b/riegeli/bytes/limiting_writer.cc
index 467259c..9715c8d 100644
--- a/riegeli/bytes/limiting_writer.cc
+++ b/riegeli/bytes/limiting_writer.cc
@@ -16,7 +16,6 @@
 
 #include <stddef.h>
 
-#include <limits>
 #include <optional>
 #include <utility>
 
@@ -68,10 +67,9 @@
 }
 
 void LimitingWriterBase::set_max_length(Position max_length) {
-  if (ABSL_PREDICT_FALSE(max_length >
-                         std::numeric_limits<Position>::max() - pos())) {
+  if (ABSL_PREDICT_FALSE(max_length > kMaxPosition - pos())) {
     if (exact_) FailLengthOverflow(max_length);
-    max_pos_ = std::numeric_limits<Position>::max();
+    max_pos_ = kMaxPosition;
     return;
   }
   set_max_pos(pos() + max_length);
diff --git a/riegeli/bytes/limiting_writer.h b/riegeli/bytes/limiting_writer.h
index 3151c54..1ecb4dc 100644
--- a/riegeli/bytes/limiting_writer.h
+++ b/riegeli/bytes/limiting_writer.h
@@ -150,7 +150,7 @@
   Position max_length() const { return SaturatingSub(max_pos_, pos()); }
 
   // Clears the limit.
-  void clear_limit() { max_pos_ = std::numeric_limits<Position>::max(); }
+  void clear_limit() { max_pos_ = kMaxPosition; }
 
   bool SupportsRandomAccess() override;
   bool SupportsTruncate() override;
@@ -195,6 +195,8 @@
   Reader* ReadModeImpl(Position initial_pos) override;
 
  private:
+  static constexpr Position kMaxPosition = std::numeric_limits<Position>::max();
+
   ABSL_ATTRIBUTE_COLD bool FailLimitExceeded();
   ABSL_ATTRIBUTE_COLD bool FailLimitExceeded(Writer& dest);
   ABSL_ATTRIBUTE_COLD void FailLengthOverflow(Position max_length);
@@ -204,7 +206,7 @@
   bool WriteInternal(Src&& src, RemoveSuffix&& remove_suffix);
 
   // Invariant: `start_pos() <= max_pos_`
-  Position max_pos_ = std::numeric_limits<Position>::max();
+  Position max_pos_ = kMaxPosition;
 
   bool exact_ = false;
 
@@ -296,13 +298,13 @@
 
 inline void LimitingWriterBase::Reset(Closed) {
   Writer::Reset(kClosed);
-  max_pos_ = std::numeric_limits<Position>::max();
+  max_pos_ = kMaxPosition;
   exact_ = false;
 }
 
 inline void LimitingWriterBase::Reset(bool exact) {
   Writer::Reset();
-  max_pos_ = std::numeric_limits<Position>::max();
+  max_pos_ = kMaxPosition;
   exact_ = exact;
 }
 
diff --git a/riegeli/bytes/null_backward_writer.cc b/riegeli/bytes/null_backward_writer.cc
index a7e394c..2629208 100644
--- a/riegeli/bytes/null_backward_writer.cc
+++ b/riegeli/bytes/null_backward_writer.cc
@@ -16,7 +16,6 @@
 
 #include <stddef.h>
 
-#include <limits>
 #include <optional>
 
 #include "absl/base/optimization.h"
@@ -47,13 +46,12 @@
 
 inline bool NullBackwardWriter::MakeBuffer(size_t min_length,
                                            size_t recommended_length) {
-  if (ABSL_PREDICT_FALSE(min_length >
-                         std::numeric_limits<Position>::max() - start_pos())) {
+  if (ABSL_PREDICT_FALSE(min_length > kMaxPosition - start_pos())) {
     return FailOverflow();
   }
   const size_t buffer_length = UnsignedMin(
       buffer_sizer_.BufferLength(start_pos(), min_length, recommended_length),
-      std::numeric_limits<Position>::max() - start_pos());
+      kMaxPosition - start_pos());
   buffer_.Reset(buffer_length);
   set_buffer(buffer_.data(), buffer_length);
   return true;
@@ -80,8 +78,7 @@
          "enough space available, use Write(string_view) instead";
   if (ABSL_PREDICT_FALSE(!ok())) return false;
   SyncBuffer();
-  if (ABSL_PREDICT_FALSE(src.size() >
-                         std::numeric_limits<Position>::max() - start_pos())) {
+  if (ABSL_PREDICT_FALSE(src.size() > kMaxPosition - start_pos())) {
     return FailOverflow();
   }
   move_start_pos(src.size());
@@ -94,8 +91,7 @@
          "enough space available, use Write(ExternalRef) instead";
   if (ABSL_PREDICT_FALSE(!ok())) return false;
   SyncBuffer();
-  if (ABSL_PREDICT_FALSE(src.size() >
-                         std::numeric_limits<Position>::max() - start_pos())) {
+  if (ABSL_PREDICT_FALSE(src.size() > kMaxPosition - start_pos())) {
     return FailOverflow();
   }
   move_start_pos(src.size());
@@ -108,8 +104,7 @@
          "enough space available, use Write(Chain) instead";
   if (ABSL_PREDICT_FALSE(!ok())) return false;
   SyncBuffer();
-  if (ABSL_PREDICT_FALSE(src.size() >
-                         std::numeric_limits<Position>::max() - start_pos())) {
+  if (ABSL_PREDICT_FALSE(src.size() > kMaxPosition - start_pos())) {
     return FailOverflow();
   }
   move_start_pos(src.size());
@@ -122,8 +117,7 @@
          "enough space available, use Write(Cord) instead";
   if (ABSL_PREDICT_FALSE(!ok())) return false;
   SyncBuffer();
-  if (ABSL_PREDICT_FALSE(src.size() >
-                         std::numeric_limits<Position>::max() - start_pos())) {
+  if (ABSL_PREDICT_FALSE(src.size() > kMaxPosition - start_pos())) {
     return FailOverflow();
   }
   move_start_pos(src.size());
@@ -136,8 +130,7 @@
          "enough space available, use Write(ByteFill) instead";
   if (ABSL_PREDICT_FALSE(!ok())) return false;
   SyncBuffer();
-  if (ABSL_PREDICT_FALSE(src.size() >
-                         std::numeric_limits<Position>::max() - start_pos())) {
+  if (ABSL_PREDICT_FALSE(src.size() > kMaxPosition - start_pos())) {
     return FailOverflow();
   }
   move_start_pos(src.size());
diff --git a/riegeli/bytes/null_backward_writer.h b/riegeli/bytes/null_backward_writer.h
index b044fd8..11c8e09 100644
--- a/riegeli/bytes/null_backward_writer.h
+++ b/riegeli/bytes/null_backward_writer.h
@@ -17,6 +17,7 @@
 
 #include <stddef.h>
 
+#include <limits>
 #include <optional>
 #include <utility>
 
@@ -82,6 +83,8 @@
   bool TruncateImpl(Position new_size) override;
 
  private:
+  static constexpr Position kMaxPosition = std::numeric_limits<Position>::max();
+
   // Resets buffer pointers to the beginning of the buffer.
   void SyncBuffer();
 
diff --git a/riegeli/bytes/null_writer.cc b/riegeli/bytes/null_writer.cc
index 3a998e9..a283499 100644
--- a/riegeli/bytes/null_writer.cc
+++ b/riegeli/bytes/null_writer.cc
@@ -16,7 +16,6 @@
 
 #include <stddef.h>
 
-#include <limits>
 #include <optional>
 
 #include "absl/base/optimization.h"
@@ -47,13 +46,12 @@
 
 inline bool NullWriter::MakeBuffer(size_t min_length,
                                    size_t recommended_length) {
-  if (ABSL_PREDICT_FALSE(min_length >
-                         std::numeric_limits<Position>::max() - start_pos())) {
+  if (ABSL_PREDICT_FALSE(min_length > kMaxPosition - start_pos())) {
     return FailOverflow();
   }
   const size_t buffer_length = UnsignedMin(
       buffer_sizer_.BufferLength(start_pos(), min_length, recommended_length),
-      std::numeric_limits<Position>::max() - start_pos());
+      kMaxPosition - start_pos());
   buffer_.Reset(buffer_length);
   set_buffer(buffer_.data(), buffer_length);
   return true;
@@ -78,8 +76,7 @@
          "enough space available, use Write(string_view) instead";
   if (ABSL_PREDICT_FALSE(!ok())) return false;
   SyncBuffer();
-  if (ABSL_PREDICT_FALSE(src.size() >
-                         std::numeric_limits<Position>::max() - start_pos())) {
+  if (ABSL_PREDICT_FALSE(src.size() > kMaxPosition - start_pos())) {
     return FailOverflow();
   }
   move_start_pos(src.size());
@@ -92,8 +89,7 @@
          "enough space available, use Write(ExternalRef) instead";
   if (ABSL_PREDICT_FALSE(!ok())) return false;
   SyncBuffer();
-  if (ABSL_PREDICT_FALSE(src.size() >
-                         std::numeric_limits<Position>::max() - start_pos())) {
+  if (ABSL_PREDICT_FALSE(src.size() > kMaxPosition - start_pos())) {
     return FailOverflow();
   }
   move_start_pos(src.size());
@@ -106,8 +102,7 @@
          "enough space available, use Write(Chain) instead";
   if (ABSL_PREDICT_FALSE(!ok())) return false;
   SyncBuffer();
-  if (ABSL_PREDICT_FALSE(src.size() >
-                         std::numeric_limits<Position>::max() - start_pos())) {
+  if (ABSL_PREDICT_FALSE(src.size() > kMaxPosition - start_pos())) {
     return FailOverflow();
   }
   move_start_pos(src.size());
@@ -120,8 +115,7 @@
          "enough space available, use Write(Cord) instead";
   if (ABSL_PREDICT_FALSE(!ok())) return false;
   SyncBuffer();
-  if (ABSL_PREDICT_FALSE(src.size() >
-                         std::numeric_limits<Position>::max() - start_pos())) {
+  if (ABSL_PREDICT_FALSE(src.size() > kMaxPosition - start_pos())) {
     return FailOverflow();
   }
   move_start_pos(src.size());
@@ -134,8 +128,7 @@
          "enough space available, use Write(ByteFill) instead";
   if (ABSL_PREDICT_FALSE(!ok())) return false;
   SyncBuffer();
-  if (ABSL_PREDICT_FALSE(src.size() >
-                         std::numeric_limits<Position>::max() - start_pos())) {
+  if (ABSL_PREDICT_FALSE(src.size() > kMaxPosition - start_pos())) {
     return FailOverflow();
   }
   move_start_pos(src.size());
diff --git a/riegeli/bytes/null_writer.h b/riegeli/bytes/null_writer.h
index 86fc12d..021ac09 100644
--- a/riegeli/bytes/null_writer.h
+++ b/riegeli/bytes/null_writer.h
@@ -17,6 +17,7 @@
 
 #include <stddef.h>
 
+#include <limits>
 #include <optional>
 #include <utility>
 
@@ -83,6 +84,8 @@
   bool TruncateImpl(Position new_size) override;
 
  private:
+  static constexpr Position kMaxPosition = std::numeric_limits<Position>::max();
+
   // Resets buffer pointers to the beginning of the buffer.
   void SyncBuffer();
 
diff --git a/riegeli/bytes/ostream_writer.cc b/riegeli/bytes/ostream_writer.cc
index c43a829..3a940bd 100644
--- a/riegeli/bytes/ostream_writer.cc
+++ b/riegeli/bytes/ostream_writer.cc
@@ -19,7 +19,6 @@
 #include <cerrno>
 #include <ios>
 #include <istream>
-#include <limits>
 #include <optional>
 #include <ostream>
 #include <string>
@@ -63,9 +62,7 @@
     return;
   }
   if (assumed_pos != std::nullopt) {
-    if (ABSL_PREDICT_FALSE(
-            *assumed_pos >
-            Position{std::numeric_limits<std::streamoff>::max()})) {
+    if (ABSL_PREDICT_FALSE(*assumed_pos > kMaxPosition)) {
       FailOverflow();
       return;
     }
@@ -209,9 +206,7 @@
       << "Failed precondition of BufferedWriter::WriteInternal()";
   if (ABSL_PREDICT_FALSE(!WriteMode())) return false;
   std::ostream& dest = *DestStream();
-  if (ABSL_PREDICT_FALSE(src.size() >
-                         Position{std::numeric_limits<std::streamoff>::max()} -
-                             start_pos())) {
+  if (ABSL_PREDICT_FALSE(src.size() > kMaxPosition - start_pos())) {
     return FailOverflow();
   }
   errno = 0;
diff --git a/riegeli/bytes/ostream_writer.h b/riegeli/bytes/ostream_writer.h
index d736df9..dacc92e 100644
--- a/riegeli/bytes/ostream_writer.h
+++ b/riegeli/bytes/ostream_writer.h
@@ -18,7 +18,9 @@
 #include <stdint.h>
 
 #include <cerrno>
+#include <ios>
 #include <istream>
+#include <limits>
 #include <optional>
 #include <ostream>
 #include <utility>
@@ -135,6 +137,9 @@
   // Encodes a `bool` or a marker that the value is not resolved yet.
   enum class LazyBoolState : uint8_t { kUnknown, kTrue, kFalse };
 
+  static constexpr Position kMaxPosition =
+      Position{std::numeric_limits<std::streamoff>::max()};
+
   absl::Status FailedOperationStatus(absl::string_view operation);
 
   bool WriteMode();
diff --git a/riegeli/bytes/position_shifting_backward_writer.h b/riegeli/bytes/position_shifting_backward_writer.h
index d757433..055856c 100644
--- a/riegeli/bytes/position_shifting_backward_writer.h
+++ b/riegeli/bytes/position_shifting_backward_writer.h
@@ -113,6 +113,8 @@
   bool TruncateImpl(Position new_size) override;
 
  private:
+  static constexpr Position kMaxPosition = std::numeric_limits<Position>::max();
+
   ABSL_ATTRIBUTE_COLD bool FailUnderflow(Position new_pos, Object& object);
 
   // This template is defined and used only in position_shifting_writer.cc.
@@ -245,11 +247,11 @@
 
 inline bool PositionShiftingBackwardWriterBase::MakeBuffer(BackwardWriter& dest,
                                                            size_t min_length) {
-  const Position max_pos = std::numeric_limits<Position>::max() - base_pos_;
+  const Position max_pos = kMaxPosition - base_pos_;
   if (ABSL_PREDICT_FALSE(dest.limit_pos() > max_pos)) {
     if (ABSL_PREDICT_FALSE(dest.pos() > max_pos)) {
       set_buffer(dest.cursor());
-      set_start_pos(std::numeric_limits<Position>::max());
+      set_start_pos(kMaxPosition);
       return FailOverflow();
     }
     set_buffer(dest.cursor() - IntCast<size_t>(max_pos - dest.pos()),
diff --git a/riegeli/bytes/position_shifting_reader.cc b/riegeli/bytes/position_shifting_reader.cc
index 92f9f72..e128d1e 100644
--- a/riegeli/bytes/position_shifting_reader.cc
+++ b/riegeli/bytes/position_shifting_reader.cc
@@ -233,8 +233,7 @@
   if (ABSL_PREDICT_FALSE(!MakeBuffer(src) || size == std::nullopt)) {
     return std::nullopt;
   }
-  if (ABSL_PREDICT_FALSE(*size >
-                         std::numeric_limits<Position>::max() - base_pos_)) {
+  if (ABSL_PREDICT_FALSE(*size > kMaxPosition - base_pos_)) {
     FailOverflow();
     return std::nullopt;
   }
diff --git a/riegeli/bytes/position_shifting_reader.h b/riegeli/bytes/position_shifting_reader.h
index 7af997a..5a7a51a 100644
--- a/riegeli/bytes/position_shifting_reader.h
+++ b/riegeli/bytes/position_shifting_reader.h
@@ -121,6 +121,8 @@
   std::unique_ptr<Reader> NewReaderImpl(Position initial_pos) override;
 
  private:
+  static constexpr Position kMaxPosition = std::numeric_limits<Position>::max();
+
   ABSL_ATTRIBUTE_COLD bool FailUnderflow(Position new_pos, Object& object);
 
   // This template is defined and used only in position_shifting_reader.cc.
@@ -243,16 +245,16 @@
 
 inline bool PositionShiftingReaderBase::MakeBuffer(Reader& src,
                                                    size_t min_length) {
-  const Position max_pos = std::numeric_limits<Position>::max() - base_pos_;
+  const Position max_pos = kMaxPosition - base_pos_;
   if (ABSL_PREDICT_FALSE(src.limit_pos() > max_pos)) {
     if (ABSL_PREDICT_FALSE(src.pos() > max_pos)) {
       set_buffer(src.cursor());
-      set_limit_pos(std::numeric_limits<Position>::max());
+      set_limit_pos(kMaxPosition);
       return FailOverflow();
     }
     set_buffer(src.start(), IntCast<size_t>(max_pos - src.start_pos()),
                src.start_to_cursor());
-    set_limit_pos(std::numeric_limits<Position>::max());
+    set_limit_pos(kMaxPosition);
     if (ABSL_PREDICT_FALSE(available() < min_length)) return FailOverflow();
   } else {
     set_buffer(src.start(), src.start_to_limit(), src.start_to_cursor());
diff --git a/riegeli/bytes/position_shifting_writer.cc b/riegeli/bytes/position_shifting_writer.cc
index 21abeba..2420836 100644
--- a/riegeli/bytes/position_shifting_writer.cc
+++ b/riegeli/bytes/position_shifting_writer.cc
@@ -16,7 +16,6 @@
 
 #include <stddef.h>
 
-#include <limits>
 #include <optional>
 #include <utility>
 
@@ -176,8 +175,7 @@
   if (ABSL_PREDICT_FALSE(!MakeBuffer(dest) || size == std::nullopt)) {
     return std::nullopt;
   }
-  if (ABSL_PREDICT_FALSE(*size >
-                         std::numeric_limits<Position>::max() - base_pos_)) {
+  if (ABSL_PREDICT_FALSE(*size > kMaxPosition - base_pos_)) {
     FailOverflow();
     return std::nullopt;
   }
diff --git a/riegeli/bytes/position_shifting_writer.h b/riegeli/bytes/position_shifting_writer.h
index 254eb57..1d7951c 100644
--- a/riegeli/bytes/position_shifting_writer.h
+++ b/riegeli/bytes/position_shifting_writer.h
@@ -120,6 +120,8 @@
   Reader* ReadModeImpl(Position initial_pos) override;
 
  private:
+  static constexpr Position kMaxPosition = std::numeric_limits<Position>::max();
+
   ABSL_ATTRIBUTE_COLD bool FailUnderflow(absl::string_view operation,
                                          Position new_pos, Object& object);
 
@@ -250,11 +252,11 @@
 
 inline bool PositionShiftingWriterBase::MakeBuffer(Writer& dest,
                                                    size_t min_length) {
-  const Position max_pos = std::numeric_limits<Position>::max() - base_pos_;
+  const Position max_pos = kMaxPosition - base_pos_;
   if (ABSL_PREDICT_FALSE(dest.limit_pos() > max_pos)) {
     if (ABSL_PREDICT_FALSE(dest.pos() > max_pos)) {
       set_buffer(dest.cursor());
-      set_start_pos(std::numeric_limits<Position>::max());
+      set_start_pos(kMaxPosition);
       return FailOverflow();
     }
     set_buffer(dest.cursor(), IntCast<size_t>(max_pos - dest.pos()));
diff --git a/riegeli/bytes/prefix_limiting_backward_writer.cc b/riegeli/bytes/prefix_limiting_backward_writer.cc
index 2fad7f9..0767f0a 100644
--- a/riegeli/bytes/prefix_limiting_backward_writer.cc
+++ b/riegeli/bytes/prefix_limiting_backward_writer.cc
@@ -16,7 +16,6 @@
 
 #include <stddef.h>
 
-#include <limits>
 #include <utility>
 
 #include "absl/base/optimization.h"
@@ -149,8 +148,7 @@
   BackwardWriter& dest = *DestWriter();
   SyncBuffer(dest);
   bool truncate_ok;
-  if (ABSL_PREDICT_FALSE(new_size >
-                         std::numeric_limits<Position>::max() - base_pos_)) {
+  if (ABSL_PREDICT_FALSE(new_size > kMaxPosition - base_pos_)) {
     truncate_ok = false;
   } else {
     truncate_ok = dest.Truncate(new_size + base_pos_);
diff --git a/riegeli/bytes/prefix_limiting_backward_writer.h b/riegeli/bytes/prefix_limiting_backward_writer.h
index 732a6ca..0580cda 100644
--- a/riegeli/bytes/prefix_limiting_backward_writer.h
+++ b/riegeli/bytes/prefix_limiting_backward_writer.h
@@ -17,6 +17,7 @@
 
 #include <stddef.h>
 
+#include <limits>
 #include <optional>
 #include <utility>
 
@@ -116,6 +117,8 @@
   bool TruncateImpl(Position new_size) override;
 
  private:
+  static constexpr Position kMaxPosition = std::numeric_limits<Position>::max();
+
   // This template is defined and used only in prefix_limiting_writer.cc.
   template <typename Src>
   bool WriteInternal(Src&& src);
diff --git a/riegeli/bytes/prefix_limiting_reader.cc b/riegeli/bytes/prefix_limiting_reader.cc
index 9626ef2..36f526c 100644
--- a/riegeli/bytes/prefix_limiting_reader.cc
+++ b/riegeli/bytes/prefix_limiting_reader.cc
@@ -210,9 +210,8 @@
   Reader& src = *SrcReader();
   SyncBuffer(src);
   bool seek_ok;
-  if (ABSL_PREDICT_FALSE(new_pos >
-                         std::numeric_limits<Position>::max() - base_pos_)) {
-    src.Seek(std::numeric_limits<Position>::max());
+  if (ABSL_PREDICT_FALSE(new_pos > kMaxPosition - base_pos_)) {
+    src.Seek(kMaxPosition);
     seek_ok = false;
   } else {
     seek_ok = src.Seek(new_pos + base_pos_);
diff --git a/riegeli/bytes/prefix_limiting_reader.h b/riegeli/bytes/prefix_limiting_reader.h
index b881dc5..bc002cf 100644
--- a/riegeli/bytes/prefix_limiting_reader.h
+++ b/riegeli/bytes/prefix_limiting_reader.h
@@ -17,6 +17,7 @@
 
 #include <stddef.h>
 
+#include <limits>
 #include <memory>
 #include <optional>
 #include <utility>
@@ -121,6 +122,8 @@
   std::unique_ptr<Reader> NewReaderImpl(Position initial_pos) override;
 
  private:
+  static constexpr Position kMaxPosition = std::numeric_limits<Position>::max();
+
   // This template is defined and used only in prefix_limiting_reader.cc.
   template <typename Dest>
   bool ReadInternal(size_t length, Dest& dest);
diff --git a/riegeli/bytes/prefix_limiting_writer.cc b/riegeli/bytes/prefix_limiting_writer.cc
index 560881d..7324c11 100644
--- a/riegeli/bytes/prefix_limiting_writer.cc
+++ b/riegeli/bytes/prefix_limiting_writer.cc
@@ -16,7 +16,6 @@
 
 #include <stddef.h>
 
-#include <limits>
 #include <optional>
 #include <utility>
 
@@ -154,9 +153,8 @@
   Writer& dest = *DestWriter();
   SyncBuffer(dest);
   bool seek_ok;
-  if (ABSL_PREDICT_FALSE(new_pos >
-                         std::numeric_limits<Position>::max() - base_pos_)) {
-    dest.Seek(std::numeric_limits<Position>::max());
+  if (ABSL_PREDICT_FALSE(new_pos > kMaxPosition - base_pos_)) {
+    dest.Seek(kMaxPosition);
     seek_ok = false;
   } else {
     seek_ok = dest.Seek(new_pos + base_pos_);
@@ -185,9 +183,8 @@
   Writer& dest = *DestWriter();
   SyncBuffer(dest);
   bool truncate_ok;
-  if (ABSL_PREDICT_FALSE(new_size >
-                         std::numeric_limits<Position>::max() - base_pos_)) {
-    dest.Seek(std::numeric_limits<Position>::max());
+  if (ABSL_PREDICT_FALSE(new_size > kMaxPosition - base_pos_)) {
+    dest.Seek(kMaxPosition);
     truncate_ok = false;
   } else {
     truncate_ok = dest.Truncate(new_size + base_pos_);
diff --git a/riegeli/bytes/prefix_limiting_writer.h b/riegeli/bytes/prefix_limiting_writer.h
index b0895a0..e3b60a1 100644
--- a/riegeli/bytes/prefix_limiting_writer.h
+++ b/riegeli/bytes/prefix_limiting_writer.h
@@ -17,6 +17,7 @@
 
 #include <stddef.h>
 
+#include <limits>
 #include <optional>
 #include <utility>
 
@@ -120,6 +121,8 @@
   Reader* ReadModeImpl(Position initial_pos) override;
 
  private:
+  static constexpr Position kMaxPosition = std::numeric_limits<Position>::max();
+
   // This template is defined and used only in prefix_limiting_writer.cc.
   template <typename Src>
   bool WriteInternal(Src&& src);
diff --git a/riegeli/bytes/resizable_writer.cc b/riegeli/bytes/resizable_writer.cc
index 20dae2b..e0f552d 100644
--- a/riegeli/bytes/resizable_writer.cc
+++ b/riegeli/bytes/resizable_writer.cc
@@ -17,7 +17,6 @@
 #include <stddef.h>
 
 #include <cstring>
-#include <limits>
 #include <optional>
 #include <utility>
 
@@ -82,8 +81,7 @@
       << "Failed precondition of Writer::PushSlow(): "
          "enough space available, use Push() instead";
   if (ABSL_PREDICT_FALSE(!ok())) return false;
-  if (ABSL_PREDICT_FALSE(min_length > std::numeric_limits<size_t>::max() -
-                                          IntCast<size_t>(pos()))) {
+  if (ABSL_PREDICT_FALSE(min_length > kMaxPosition - IntCast<size_t>(pos()))) {
     return FailOverflow();
   }
   if (!uses_secondary_buffer()) {
@@ -115,8 +113,7 @@
       << "Failed precondition of Writer::WriteSlow(string_view): "
          "enough space available, use Write(string_view) instead";
   if (ABSL_PREDICT_FALSE(!ok())) return false;
-  if (ABSL_PREDICT_FALSE(src.size() > std::numeric_limits<size_t>::max() -
-                                          IntCast<size_t>(pos()))) {
+  if (ABSL_PREDICT_FALSE(src.size() > kMaxPosition - IntCast<size_t>(pos()))) {
     return FailOverflow();
   }
   if (!uses_secondary_buffer()) {
@@ -156,8 +153,7 @@
       << "Failed precondition of Writer::WriteSlow(ExternalRef): "
          "enough space available, use Write(ExternalRef) instead";
   if (ABSL_PREDICT_FALSE(!ok())) return false;
-  if (ABSL_PREDICT_FALSE(src.size() > std::numeric_limits<size_t>::max() -
-                                          IntCast<size_t>(pos()))) {
+  if (ABSL_PREDICT_FALSE(src.size() > kMaxPosition - IntCast<size_t>(pos()))) {
     return FailOverflow();
   }
   if (!uses_secondary_buffer()) {
@@ -183,8 +179,7 @@
       << "Failed precondition of Writer::WriteSlow(Chain): "
          "enough space available, use Write(Chain) instead";
   if (ABSL_PREDICT_FALSE(!ok())) return false;
-  if (ABSL_PREDICT_FALSE(src.size() > std::numeric_limits<size_t>::max() -
-                                          IntCast<size_t>(pos()))) {
+  if (ABSL_PREDICT_FALSE(src.size() > kMaxPosition - IntCast<size_t>(pos()))) {
     return FailOverflow();
   }
   if (!uses_secondary_buffer()) {
@@ -210,8 +205,7 @@
       << "Failed precondition of Writer::WriteSlow(Chain&&): "
          "enough space available, use Write(Chain) instead";
   if (ABSL_PREDICT_FALSE(!ok())) return false;
-  if (ABSL_PREDICT_FALSE(src.size() > std::numeric_limits<size_t>::max() -
-                                          IntCast<size_t>(pos()))) {
+  if (ABSL_PREDICT_FALSE(src.size() > kMaxPosition - IntCast<size_t>(pos()))) {
     return FailOverflow();
   }
   if (!uses_secondary_buffer()) {
@@ -237,8 +231,7 @@
       << "Failed precondition of Writer::WriteSlow(Cord): "
          "enough space available, use Write(Cord) instead";
   if (ABSL_PREDICT_FALSE(!ok())) return false;
-  if (ABSL_PREDICT_FALSE(src.size() > std::numeric_limits<size_t>::max() -
-                                          IntCast<size_t>(pos()))) {
+  if (ABSL_PREDICT_FALSE(src.size() > kMaxPosition - IntCast<size_t>(pos()))) {
     return FailOverflow();
   }
   if (!uses_secondary_buffer()) {
@@ -264,8 +257,7 @@
       << "Failed precondition of Writer::WriteSlow(Cord&&): "
          "enough space available, use Write(Cord&&) instead";
   if (ABSL_PREDICT_FALSE(!ok())) return false;
-  if (ABSL_PREDICT_FALSE(src.size() > std::numeric_limits<size_t>::max() -
-                                          IntCast<size_t>(pos()))) {
+  if (ABSL_PREDICT_FALSE(src.size() > kMaxPosition - IntCast<size_t>(pos()))) {
     return FailOverflow();
   }
   if (!uses_secondary_buffer()) {
@@ -291,8 +283,7 @@
       << "Failed precondition of Writer::WriteSlow(ByteFill): "
          "enough space available, use Write(ByteFill) instead";
   if (ABSL_PREDICT_FALSE(!ok())) return false;
-  if (ABSL_PREDICT_FALSE(src.size() > std::numeric_limits<size_t>::max() -
-                                          IntCast<size_t>(pos()))) {
+  if (ABSL_PREDICT_FALSE(src.size() > kMaxPosition - IntCast<size_t>(pos()))) {
     return FailOverflow();
   }
   if (!uses_secondary_buffer()) {
diff --git a/riegeli/bytes/resizable_writer.h b/riegeli/bytes/resizable_writer.h
index 2913e20..2e43179 100644
--- a/riegeli/bytes/resizable_writer.h
+++ b/riegeli/bytes/resizable_writer.h
@@ -146,6 +146,8 @@
   Reader* ReadModeImpl(Position initial_pos) override;
 
  private:
+  static constexpr size_t kMaxPosition = std::numeric_limits<size_t>::max();
+
   // Discards uninitialized space from the end of `secondary_buffer_`, so that
   // it contains only actual data written.
   void SyncSecondaryBuffer();
@@ -342,6 +344,8 @@
  private:
   class Mover;
 
+  static constexpr size_t kMaxPosition = std::numeric_limits<size_t>::max();
+
   // The object providing and possibly owning the `Resizable` being written
   // to, with uninitialized space appended (possibly empty); `cursor()` points
   // to the uninitialized space.
@@ -652,8 +656,7 @@
       << "Failed precondition in "
          "ResizableWriter::GrowDestUnderCapacityAndMakeBuffer(): "
          "secondary buffer is used";
-  RIEGELI_ASSERT_LE(min_length,
-                    std::numeric_limits<size_t>::max() - IntCast<size_t>(pos()))
+  RIEGELI_ASSERT_LE(min_length, kMaxPosition - IntCast<size_t>(pos()))
       << "Failed precondition of "
          "ResizableWriter::GrowDestUnderCapacityAndMakeBuffer(): "
          "Writer position overflow";
diff --git a/riegeli/bytes/restricted_chain_writer.cc b/riegeli/bytes/restricted_chain_writer.cc
index bf939bf..ac31b43 100644
--- a/riegeli/bytes/restricted_chain_writer.cc
+++ b/riegeli/bytes/restricted_chain_writer.cc
@@ -16,7 +16,6 @@
 
 #include <stddef.h>
 
-#include <limits>
 #include <utility>
 
 #include "absl/base/optimization.h"
@@ -63,8 +62,8 @@
   RIEGELI_ASSERT_EQ(limit_pos(), dest_.size())
       << "RestrictedChainWriter destination changed unexpectedly";
   SyncBuffer();
-  if (ABSL_PREDICT_FALSE(min_length > std::numeric_limits<size_t>::max() -
-                                          IntCast<size_t>(start_pos()))) {
+  if (ABSL_PREDICT_FALSE(min_length >
+                         kMaxPosition - IntCast<size_t>(start_pos()))) {
     return FailOverflow();
   }
   MakeBuffer(min_length, recommended_length);
@@ -79,8 +78,8 @@
   RIEGELI_ASSERT_EQ(limit_pos(), dest_.size())
       << "RestrictedChainWriter destination changed unexpectedly";
   SyncBuffer();
-  if (ABSL_PREDICT_FALSE(src.size() > std::numeric_limits<size_t>::max() -
-                                          IntCast<size_t>(start_pos()))) {
+  if (ABSL_PREDICT_FALSE(src.size() >
+                         kMaxPosition - IntCast<size_t>(start_pos()))) {
     return FailOverflow();
   }
   move_start_pos(src.size());
@@ -97,8 +96,8 @@
   RIEGELI_ASSERT_EQ(limit_pos(), dest_.size())
       << "RestrictedChainWriter destination changed unexpectedly";
   SyncBuffer();
-  if (ABSL_PREDICT_FALSE(src.size() > std::numeric_limits<size_t>::max() -
-                                          IntCast<size_t>(start_pos()))) {
+  if (ABSL_PREDICT_FALSE(src.size() >
+                         kMaxPosition - IntCast<size_t>(start_pos()))) {
     return FailOverflow();
   }
   move_start_pos(src.size());
@@ -115,8 +114,8 @@
   RIEGELI_ASSERT_EQ(limit_pos(), dest_.size())
       << "RestrictedChainWriter destination changed unexpectedly";
   SyncBuffer();
-  if (ABSL_PREDICT_FALSE(src.size() > std::numeric_limits<size_t>::max() -
-                                          IntCast<size_t>(start_pos()))) {
+  if (ABSL_PREDICT_FALSE(src.size() >
+                         kMaxPosition - IntCast<size_t>(start_pos()))) {
     return FailOverflow();
   }
   move_start_pos(src.size());
@@ -133,8 +132,8 @@
   RIEGELI_ASSERT_EQ(limit_pos(), dest_.size())
       << "RestrictedChainWriter destination changed unexpectedly";
   SyncBuffer();
-  if (ABSL_PREDICT_FALSE(src.size() > std::numeric_limits<size_t>::max() -
-                                          IntCast<size_t>(start_pos()))) {
+  if (ABSL_PREDICT_FALSE(src.size() >
+                         kMaxPosition - IntCast<size_t>(start_pos()))) {
     return FailOverflow();
   }
   move_start_pos(src.size());
@@ -151,8 +150,8 @@
   RIEGELI_ASSERT_EQ(limit_pos(), dest_.size())
       << "RestrictedChainWriter destination changed unexpectedly";
   SyncBuffer();
-  if (ABSL_PREDICT_FALSE(src.size() > std::numeric_limits<size_t>::max() -
-                                          IntCast<size_t>(start_pos()))) {
+  if (ABSL_PREDICT_FALSE(src.size() >
+                         kMaxPosition - IntCast<size_t>(start_pos()))) {
     return FailOverflow();
   }
   move_start_pos(src.size());
@@ -169,8 +168,8 @@
   RIEGELI_ASSERT_EQ(limit_pos(), dest_.size())
       << "RestrictedChainWriter destination changed unexpectedly";
   SyncBuffer();
-  if (ABSL_PREDICT_FALSE(src.size() > std::numeric_limits<size_t>::max() -
-                                          IntCast<size_t>(start_pos()))) {
+  if (ABSL_PREDICT_FALSE(src.size() >
+                         kMaxPosition - IntCast<size_t>(start_pos()))) {
     return FailOverflow();
   }
   move_start_pos(src.size());
diff --git a/riegeli/bytes/restricted_chain_writer.h b/riegeli/bytes/restricted_chain_writer.h
index 13c4b2d..7db52de 100644
--- a/riegeli/bytes/restricted_chain_writer.h
+++ b/riegeli/bytes/restricted_chain_writer.h
@@ -17,6 +17,7 @@
 
 #include <stddef.h>
 
+#include <limits>
 #include <utility>
 
 #include "absl/base/attributes.h"
@@ -74,6 +75,8 @@
   bool WriteSlow(ByteFill src) override;
 
  private:
+  static constexpr size_t kMaxPosition = std::numeric_limits<size_t>::max();
+
   // Discards uninitialized space from the end of `dest_`, so that it contains
   // only actual data written.
   void SyncBuffer();
diff --git a/riegeli/bytes/splitting_writer.cc b/riegeli/bytes/splitting_writer.cc
index dd33d44..d59a8ce 100644
--- a/riegeli/bytes/splitting_writer.cc
+++ b/riegeli/bytes/splitting_writer.cc
@@ -16,7 +16,6 @@
 
 #include <stddef.h>
 
-#include <limits>
 #include <optional>
 #include <utility>
 
@@ -69,7 +68,7 @@
   RIEGELI_ASSERT(!shard_is_open())
       << "Failed precondition of SplittingWriterBase::OpenShardInternal(): "
          "shard already opened";
-  if (ABSL_PREDICT_FALSE(start_pos() == std::numeric_limits<Position>::max())) {
+  if (ABSL_PREDICT_FALSE(start_pos() == kMaxPosition)) {
     return FailOverflow();
   }
   const std::optional<Position> size_limit = OpenShardImpl();
diff --git a/riegeli/bytes/splitting_writer.h b/riegeli/bytes/splitting_writer.h
index a485c97..8fcd5a8 100644
--- a/riegeli/bytes/splitting_writer.h
+++ b/riegeli/bytes/splitting_writer.h
@@ -17,6 +17,7 @@
 
 #include <stddef.h>
 
+#include <limits>
 #include <optional>
 
 #include "absl/base/attributes.h"
@@ -162,6 +163,8 @@
   bool FlushBehindScratch(FlushType flush_type) override;
 
  private:
+  static constexpr Position kMaxPosition = std::numeric_limits<Position>::max();
+
   bool OpenShardInternal();
   bool CloseShardInternal();
 
diff --git a/riegeli/bytes/string_writer.cc b/riegeli/bytes/string_writer.cc
index 156467c..c7a3a60 100644
--- a/riegeli/bytes/string_writer.cc
+++ b/riegeli/bytes/string_writer.cc
@@ -17,7 +17,6 @@
 #include <stddef.h>
 
 #include <cstring>
-#include <limits>
 #include <optional>
 #include <string>
 #include <utility>
@@ -96,8 +95,7 @@
       << "Failed precondition in "
          "StringWriterBase::GrowDestUnderCapacityAndMakeBuffer(): "
          "secondary buffer is used";
-  RIEGELI_ASSERT_LE(min_length,
-                    std::numeric_limits<size_t>::max() - cursor_index)
+  RIEGELI_ASSERT_LE(min_length, kMaxPosition - cursor_index)
       << "Failed precondition of "
          "StringWriterBase::GrowDestUnderCapacityAndMakeBuffer(): "
          "Writer position overflow";
@@ -160,8 +158,7 @@
   std::string& dest = *DestString();
   RIEGELI_ASSERT_GE(dest.size(), limit_pos() - secondary_buffer_.size())
       << "StringWriter destination changed unexpectedly";
-  if (ABSL_PREDICT_FALSE(min_length > std::numeric_limits<size_t>::max() -
-                                          IntCast<size_t>(pos()))) {
+  if (ABSL_PREDICT_FALSE(min_length > kMaxPosition - IntCast<size_t>(pos()))) {
     return FailOverflow();
   }
   if (!uses_secondary_buffer()) {
@@ -199,8 +196,7 @@
   std::string& dest = *DestString();
   RIEGELI_ASSERT_GE(dest.size(), limit_pos() - secondary_buffer_.size())
       << "StringWriter destination changed unexpectedly";
-  if (ABSL_PREDICT_FALSE(src.size() > std::numeric_limits<size_t>::max() -
-                                          IntCast<size_t>(pos()))) {
+  if (ABSL_PREDICT_FALSE(src.size() > kMaxPosition - IntCast<size_t>(pos()))) {
     return FailOverflow();
   }
   if (!uses_secondary_buffer()) {
@@ -247,8 +243,7 @@
   std::string& dest = *DestString();
   RIEGELI_ASSERT_GE(dest.size(), limit_pos() - secondary_buffer_.size())
       << "StringWriter destination changed unexpectedly";
-  if (ABSL_PREDICT_FALSE(src.size() > std::numeric_limits<size_t>::max() -
-                                          IntCast<size_t>(pos()))) {
+  if (ABSL_PREDICT_FALSE(src.size() > kMaxPosition - IntCast<size_t>(pos()))) {
     return FailOverflow();
   }
   if (!uses_secondary_buffer()) {
@@ -284,8 +279,7 @@
   std::string& dest = *DestString();
   RIEGELI_ASSERT_GE(dest.size(), limit_pos() - secondary_buffer_.size())
       << "StringWriter destination changed unexpectedly";
-  if (ABSL_PREDICT_FALSE(src.size() > std::numeric_limits<size_t>::max() -
-                                          IntCast<size_t>(pos()))) {
+  if (ABSL_PREDICT_FALSE(src.size() > kMaxPosition - IntCast<size_t>(pos()))) {
     return FailOverflow();
   }
   if (!uses_secondary_buffer()) {
@@ -321,8 +315,7 @@
   std::string& dest = *DestString();
   RIEGELI_ASSERT_GE(dest.size(), limit_pos() - secondary_buffer_.size())
       << "StringWriter destination changed unexpectedly";
-  if (ABSL_PREDICT_FALSE(src.size() > std::numeric_limits<size_t>::max() -
-                                          IntCast<size_t>(pos()))) {
+  if (ABSL_PREDICT_FALSE(src.size() > kMaxPosition - IntCast<size_t>(pos()))) {
     return FailOverflow();
   }
   if (!uses_secondary_buffer()) {
@@ -358,8 +351,7 @@
   std::string& dest = *DestString();
   RIEGELI_ASSERT_GE(dest.size(), limit_pos() - secondary_buffer_.size())
       << "StringWriter destination changed unexpectedly";
-  if (ABSL_PREDICT_FALSE(src.size() > std::numeric_limits<size_t>::max() -
-                                          IntCast<size_t>(pos()))) {
+  if (ABSL_PREDICT_FALSE(src.size() > kMaxPosition - IntCast<size_t>(pos()))) {
     return FailOverflow();
   }
   if (!uses_secondary_buffer()) {
@@ -395,8 +387,7 @@
   std::string& dest = *DestString();
   RIEGELI_ASSERT_GE(dest.size(), limit_pos() - secondary_buffer_.size())
       << "StringWriter destination changed unexpectedly";
-  if (ABSL_PREDICT_FALSE(src.size() > std::numeric_limits<size_t>::max() -
-                                          IntCast<size_t>(pos()))) {
+  if (ABSL_PREDICT_FALSE(src.size() > kMaxPosition - IntCast<size_t>(pos()))) {
     return FailOverflow();
   }
   if (!uses_secondary_buffer()) {
@@ -432,8 +423,7 @@
   std::string& dest = *DestString();
   RIEGELI_ASSERT_GE(dest.size(), limit_pos() - secondary_buffer_.size())
       << "StringWriter destination changed unexpectedly";
-  if (ABSL_PREDICT_FALSE(src.size() > std::numeric_limits<size_t>::max() -
-                                          IntCast<size_t>(pos()))) {
+  if (ABSL_PREDICT_FALSE(src.size() > kMaxPosition - IntCast<size_t>(pos()))) {
     return FailOverflow();
   }
   if (!uses_secondary_buffer()) {
diff --git a/riegeli/bytes/string_writer.h b/riegeli/bytes/string_writer.h
index 00809d6..07c04fb 100644
--- a/riegeli/bytes/string_writer.h
+++ b/riegeli/bytes/string_writer.h
@@ -17,6 +17,7 @@
 
 #include <stddef.h>
 
+#include <limits>
 #include <optional>
 #include <string>
 #include <type_traits>
@@ -114,6 +115,8 @@
   Reader* ReadModeImpl(Position initial_pos) override;
 
  private:
+  static constexpr size_t kMaxPosition = std::numeric_limits<size_t>::max();
+
   // Returns the amount of data written, either to `*DestString()` or to
   // `secondary_buffer_`.
   size_t used_size() const;
diff --git a/riegeli/bytes/stringify_writer.h b/riegeli/bytes/stringify_writer.h
index 9de98b8..5f159ce 100644
--- a/riegeli/bytes/stringify_writer.h
+++ b/riegeli/bytes/stringify_writer.h
@@ -66,6 +66,8 @@
   bool WriteInternal(absl::string_view src) override;
 
  private:
+  static constexpr Position kMaxPosition = std::numeric_limits<Position>::max();
+
   Dest dest_{};
 };
 
@@ -127,8 +129,7 @@
          "nothing to write";
   RIEGELI_ASSERT_OK(*this)
       << "Failed precondition of BufferedWriter::WriteInternal()";
-  if (ABSL_PREDICT_FALSE(src.size() >
-                         std::numeric_limits<Position>::max() - start_pos())) {
+  if (ABSL_PREDICT_FALSE(src.size() > kMaxPosition - start_pos())) {
     return FailOverflow();
   }
   dest_->Append(src);
diff --git a/riegeli/bzip2/bzip2_reader.cc b/riegeli/bzip2/bzip2_reader.cc
index 8a1fb70..c3c615d 100644
--- a/riegeli/bzip2/bzip2_reader.cc
+++ b/riegeli/bzip2/bzip2_reader.cc
@@ -17,7 +17,6 @@
 #include <stddef.h>
 #include <stdint.h>
 
-#include <limits>
 #include <memory>
 #include <utility>
 
@@ -112,8 +111,7 @@
       << "Failed precondition of BufferedReader::ReadInternal()";
   Reader& src = *SrcReader();
   truncated_ = false;
-  max_length = UnsignedMin(max_length,
-                           std::numeric_limits<Position>::max() - limit_pos());
+  max_length = UnsignedMin(max_length, kMaxPosition - limit_pos());
   decompressor_->next_out = dest;
   for (;;) {
     decompressor_->avail_out = SaturatingIntCast<unsigned int>(
@@ -131,8 +129,7 @@
           RIEGELI_ASSERT_EQ(decompressor_->avail_out, 0u)
               << "BZ2_bzDecompress() returned but there are still input data "
                  "and output space";
-          RIEGELI_ASSERT_EQ(length_read,
-                            std::numeric_limits<Position>::max() - limit_pos())
+          RIEGELI_ASSERT_EQ(length_read, kMaxPosition - limit_pos())
               << "The position does not overflow but the output buffer is "
                  "full, while less than min_length was output, which is "
                  "impossible because the buffer has size max_length which is "
diff --git a/riegeli/bzip2/bzip2_reader.h b/riegeli/bzip2/bzip2_reader.h
index fc7c596..e0213a1 100644
--- a/riegeli/bzip2/bzip2_reader.h
+++ b/riegeli/bzip2/bzip2_reader.h
@@ -17,6 +17,7 @@
 
 #include <stddef.h>
 
+#include <limits>
 #include <memory>
 #include <utility>
 
@@ -117,6 +118,8 @@
     }
   };
 
+  static constexpr Position kMaxPosition = std::numeric_limits<Position>::max();
+
   void InitializeDecompressor();
   ABSL_ATTRIBUTE_COLD bool FailOperation(absl::string_view operation,
                                          int bzlib_code);
diff --git a/riegeli/bzip2/bzip2_writer.cc b/riegeli/bzip2/bzip2_writer.cc
index 1c49c24..58a41fc 100644
--- a/riegeli/bzip2/bzip2_writer.cc
+++ b/riegeli/bzip2/bzip2_writer.cc
@@ -111,8 +111,7 @@
                                            int flush) {
   RIEGELI_ASSERT_OK(*this)
       << "Failed precondition of Bzip2WriterBase::WriteInternal()";
-  if (ABSL_PREDICT_FALSE(src.size() >
-                         std::numeric_limits<Position>::max() - start_pos())) {
+  if (ABSL_PREDICT_FALSE(src.size() > kMaxPosition - start_pos())) {
     return FailOverflow();
   }
   compressor_->next_in = const_cast<char*>(src.data());
diff --git a/riegeli/bzip2/bzip2_writer.h b/riegeli/bzip2/bzip2_writer.h
index 367ae80..8c1c19a 100644
--- a/riegeli/bzip2/bzip2_writer.h
+++ b/riegeli/bzip2/bzip2_writer.h
@@ -15,6 +15,7 @@
 #ifndef RIEGELI_BZIP2_BZIP2_WRITER_H_
 #define RIEGELI_BZIP2_BZIP2_WRITER_H_
 
+#include <limits>
 #include <memory>
 #include <utility>
 
@@ -108,6 +109,8 @@
     }
   };
 
+  static constexpr Position kMaxPosition = std::numeric_limits<Position>::max();
+
   ABSL_ATTRIBUTE_COLD bool FailOperation(absl::string_view operation,
                                          int bzlib_code);
   bool WriteInternal(absl::string_view src, Writer& dest, int flush);
diff --git a/riegeli/gcs/gcs_reader.cc b/riegeli/gcs/gcs_reader.cc
index 3e6c886..81b1866 100644
--- a/riegeli/gcs/gcs_reader.cc
+++ b/riegeli/gcs/gcs_reader.cc
@@ -18,7 +18,6 @@
 #include <stdint.h>
 
 #include <functional>
-#include <limits>
 #include <memory>
 #include <optional>
 #include <utility>
@@ -78,8 +77,7 @@
         break;
       case Origin::kEnd:
         if (stream.size() != std::nullopt &&
-            ABSL_PREDICT_TRUE(*stream.size() <=
-                              uint64_t{std::numeric_limits<int64_t>::max()})) {
+            ABSL_PREDICT_TRUE(*stream.size() <= kMaxPosition)) {
           initial_pos = SaturatingSub(
               *stream.size(), IntCast<uint64_t>(range_options.initial_pos));
         }
@@ -92,8 +90,7 @@
                            .set_buffer_options(buffer_options));
   PropagateStatus();
   if (src().size() != std::nullopt &&
-      ABSL_PREDICT_TRUE(*src().size() <=
-                        uint64_t{std::numeric_limits<int64_t>::max()})) {
+      ABSL_PREDICT_TRUE(*src().size() <= kMaxPosition)) {
     set_exact_size(*src().size());
     if (range_options.max_size != std::nullopt &&
         ABSL_PREDICT_TRUE(*range_options.max_size >= 0)) {
diff --git a/riegeli/gcs/gcs_reader.h b/riegeli/gcs/gcs_reader.h
index 5024fa0..fed77d6 100644
--- a/riegeli/gcs/gcs_reader.h
+++ b/riegeli/gcs/gcs_reader.h
@@ -19,6 +19,7 @@
 #include <stdint.h>
 
 #include <functional>
+#include <limits>
 #include <memory>
 #include <optional>
 #include <tuple>
@@ -125,6 +126,8 @@
   std::unique_ptr<Reader> NewReaderImpl(Position initial_pos) override;
 
  private:
+  static constexpr uint64_t kMaxPosition = std::numeric_limits<int64_t>::max();
+
   friend class GcsWriter;  // For `set_exact_size()`.
 
   struct NewReaderTag {};
diff --git a/riegeli/lz4/lz4_reader.cc b/riegeli/lz4/lz4_reader.cc
index 92520ef..d1786f1 100644
--- a/riegeli/lz4/lz4_reader.cc
+++ b/riegeli/lz4/lz4_reader.cc
@@ -193,8 +193,7 @@
     decompress_options.stableDst = 1;
     effective_min_length = std::numeric_limits<size_t>::max();
   }
-  max_length = UnsignedMin(max_length,
-                           std::numeric_limits<Position>::max() - limit_pos());
+  max_length = UnsignedMin(max_length, kMaxPosition - limit_pos());
   for (;;) {
     size_t src_length = src.available();
     size_t dest_length = max_length;
@@ -230,8 +229,7 @@
       RIEGELI_ASSERT_EQ(dest_length, max_length)
           << "LZ4F_decompress_usingDict() returned but there are still "
              "input data and output space";
-      RIEGELI_ASSERT_EQ(dest_length,
-                        std::numeric_limits<Position>::max() - limit_pos())
+      RIEGELI_ASSERT_EQ(dest_length, kMaxPosition - limit_pos())
           << "The position does not overflow but the output buffer is full, "
              "while less than min_length was output, which implies that "
              "LZ4F_decompress_usingDict() wants to output more than the "
diff --git a/riegeli/lz4/lz4_reader.h b/riegeli/lz4/lz4_reader.h
index 536b128..0307d4b 100644
--- a/riegeli/lz4/lz4_reader.h
+++ b/riegeli/lz4/lz4_reader.h
@@ -17,6 +17,7 @@
 
 #include <stddef.h>
 
+#include <limits>
 #include <memory>
 #include <optional>
 #include <utility>
@@ -206,6 +207,8 @@
     }
   };
 
+  static constexpr Position kMaxPosition = std::numeric_limits<Position>::max();
+
   void InitializeDecompressor(Reader& src);
   bool ReadHeader(Reader& src);
 
diff --git a/riegeli/lz4/lz4_writer.cc b/riegeli/lz4/lz4_writer.cc
index 27a2e54..e14576e 100644
--- a/riegeli/lz4/lz4_writer.cc
+++ b/riegeli/lz4/lz4_writer.cc
@@ -20,7 +20,6 @@
 
 #include <stddef.h>
 
-#include <limits>
 #include <memory>
 #include <optional>
 #include <utility>
@@ -169,8 +168,7 @@
   RIEGELI_ASSERT_OK(*this)
       << "Failed precondition of BufferedWriter::WriteInternal()";
   Writer& dest = *DestWriter();
-  if (ABSL_PREDICT_FALSE(src.size() >
-                         std::numeric_limits<Position>::max() - start_pos())) {
+  if (ABSL_PREDICT_FALSE(src.size() > kMaxPosition - start_pos())) {
     return FailOverflow();
   }
   if (pledged_size_ != std::nullopt) {
diff --git a/riegeli/lz4/lz4_writer.h b/riegeli/lz4/lz4_writer.h
index cd66bb5..493b3c4 100644
--- a/riegeli/lz4/lz4_writer.h
+++ b/riegeli/lz4/lz4_writer.h
@@ -17,6 +17,7 @@
 
 #include <stddef.h>
 
+#include <limits>
 #include <optional>
 #include <utility>
 
@@ -293,6 +294,8 @@
     }
   };
 
+  static constexpr Position kMaxPosition = std::numeric_limits<Position>::max();
+
   bool DoneCompression(Writer& dest);
 
   Lz4Dictionary dictionary_;
diff --git a/riegeli/snappy/framed/framed_snappy_reader.cc b/riegeli/snappy/framed/framed_snappy_reader.cc
index 620c45b..1c37687 100644
--- a/riegeli/snappy/framed/framed_snappy_reader.cc
+++ b/riegeli/snappy/framed/framed_snappy_reader.cc
@@ -17,7 +17,6 @@
 #include <stddef.h>
 #include <stdint.h>
 
-#include <limits>
 #include <memory>
 #include <utility>
 
@@ -159,8 +158,7 @@
         }
         src.move_cursor(sizeof(uint32_t) + chunk_length);
         if (ABSL_PREDICT_FALSE(uncompressed_length == 0)) continue;
-        const Position max_length =
-            std::numeric_limits<Position>::max() - limit_pos();
+        const Position max_length = kMaxPosition - limit_pos();
         if (ABSL_PREDICT_FALSE(uncompressed_length > max_length)) {
           set_buffer(uncompressed_.data(), IntCast<size_t>(max_length));
           move_limit_pos(available());
@@ -193,8 +191,7 @@
         }
         src.move_cursor(sizeof(uint32_t) + chunk_length);
         if (ABSL_PREDICT_FALSE(uncompressed_length == 0)) continue;
-        const Position max_length =
-            std::numeric_limits<Position>::max() - limit_pos();
+        const Position max_length = kMaxPosition - limit_pos();
         if (ABSL_PREDICT_FALSE(uncompressed_length > max_length)) {
           set_buffer(uncompressed_data, IntCast<size_t>(max_length));
           move_limit_pos(available());
diff --git a/riegeli/snappy/framed/framed_snappy_reader.h b/riegeli/snappy/framed/framed_snappy_reader.h
index 21d1a8e..1231fba 100644
--- a/riegeli/snappy/framed/framed_snappy_reader.h
+++ b/riegeli/snappy/framed/framed_snappy_reader.h
@@ -17,6 +17,7 @@
 
 #include <stddef.h>
 
+#include <limits>
 #include <memory>
 #include <utility>
 
@@ -72,6 +73,8 @@
   std::unique_ptr<Reader> NewReaderImpl(Position initial_pos) override;
 
  private:
+  static constexpr Position kMaxPosition = std::numeric_limits<Position>::max();
+
   ABSL_ATTRIBUTE_COLD bool FailInvalidStream(absl::string_view message);
 
   Position initial_compressed_pos_ = 0;
diff --git a/riegeli/snappy/framed/framed_snappy_writer.cc b/riegeli/snappy/framed/framed_snappy_writer.cc
index e2d5381..f5ef18e 100644
--- a/riegeli/snappy/framed/framed_snappy_writer.cc
+++ b/riegeli/snappy/framed/framed_snappy_writer.cc
@@ -18,7 +18,6 @@
 #include <stdint.h>
 
 #include <cstring>
-#include <limits>
 #include <optional>
 #include <utility>
 
@@ -105,14 +104,14 @@
   if (ABSL_PREDICT_FALSE(!ok())) return false;
   Writer& dest = *DestWriter();
   if (ABSL_PREDICT_FALSE(!PushInternal(dest))) return false;
-  if (ABSL_PREDICT_FALSE(start_pos() == std::numeric_limits<Position>::max())) {
+  if (ABSL_PREDICT_FALSE(start_pos() == kMaxPosition)) {
     return FailOverflow();
   }
   const size_t length = UnsignedMin(
       ApplyBufferConstraints(
           ApplySizeHint(snappy::kBlockSize, size_hint_, start_pos()), 1,
           recommended_length, snappy::kBlockSize),
-      std::numeric_limits<Position>::max() - start_pos());
+      kMaxPosition - start_pos());
   uncompressed_.Reset(length);
   set_buffer(uncompressed_.data(), length);
   return true;
diff --git a/riegeli/snappy/framed/framed_snappy_writer.h b/riegeli/snappy/framed/framed_snappy_writer.h
index d2c70f8..12933ec 100644
--- a/riegeli/snappy/framed/framed_snappy_writer.h
+++ b/riegeli/snappy/framed/framed_snappy_writer.h
@@ -17,6 +17,7 @@
 
 #include <stddef.h>
 
+#include <limits>
 #include <optional>
 #include <utility>
 
@@ -110,6 +111,8 @@
   Reader* ReadModeBehindScratch(Position initial_pos) override;
 
  private:
+  static constexpr Position kMaxPosition = std::numeric_limits<Position>::max();
+
   // Compresses buffered data, but unlike `PushSlow()`, does not ensure that a
   // buffer is allocated.
   //
diff --git a/riegeli/snappy/hadoop/hadoop_snappy_reader.cc b/riegeli/snappy/hadoop/hadoop_snappy_reader.cc
index 18e4c66..77b1e24 100644
--- a/riegeli/snappy/hadoop/hadoop_snappy_reader.cc
+++ b/riegeli/snappy/hadoop/hadoop_snappy_reader.cc
@@ -154,8 +154,7 @@
     src.move_cursor(sizeof(uint32_t) + compressed_length);
   } while (uncompressed_length == 0);
   remaining_chunk_length_ -= uncompressed_length;
-  const Position max_length =
-      std::numeric_limits<Position>::max() - limit_pos();
+  const Position max_length = kMaxPosition - limit_pos();
   if (ABSL_PREDICT_FALSE(uncompressed_length > max_length)) {
     set_buffer(uncompressed_data, IntCast<size_t>(max_length));
     move_limit_pos(available());
diff --git a/riegeli/snappy/hadoop/hadoop_snappy_reader.h b/riegeli/snappy/hadoop/hadoop_snappy_reader.h
index eb7c1b9..8e83766 100644
--- a/riegeli/snappy/hadoop/hadoop_snappy_reader.h
+++ b/riegeli/snappy/hadoop/hadoop_snappy_reader.h
@@ -18,6 +18,7 @@
 #include <stddef.h>
 #include <stdint.h>
 
+#include <limits>
 #include <memory>
 #include <utility>
 
@@ -72,6 +73,8 @@
   std::unique_ptr<Reader> NewReaderImpl(Position initial_pos) override;
 
  private:
+  static constexpr Position kMaxPosition = std::numeric_limits<Position>::max();
+
   ABSL_ATTRIBUTE_COLD bool FailInvalidStream(absl::string_view message);
 
   Position initial_compressed_pos_ = 0;
diff --git a/riegeli/snappy/hadoop/hadoop_snappy_writer.cc b/riegeli/snappy/hadoop/hadoop_snappy_writer.cc
index c94302f..b7bb45f 100644
--- a/riegeli/snappy/hadoop/hadoop_snappy_writer.cc
+++ b/riegeli/snappy/hadoop/hadoop_snappy_writer.cc
@@ -17,7 +17,6 @@
 #include <stddef.h>
 #include <stdint.h>
 
-#include <limits>
 #include <optional>
 #include <utility>
 
@@ -91,14 +90,14 @@
   if (ABSL_PREDICT_FALSE(!ok())) return false;
   Writer& dest = *DestWriter();
   if (ABSL_PREDICT_FALSE(!PushInternal(dest))) return false;
-  if (ABSL_PREDICT_FALSE(start_pos() == std::numeric_limits<Position>::max())) {
+  if (ABSL_PREDICT_FALSE(start_pos() == kMaxPosition)) {
     return FailOverflow();
   }
   const size_t length = UnsignedMin(
       ApplyBufferConstraints(
           ApplySizeHint(snappy::kBlockSize, size_hint_, start_pos()), 1,
           recommended_length, snappy::kBlockSize),
-      std::numeric_limits<Position>::max() - start_pos());
+      kMaxPosition - start_pos());
   uncompressed_.Reset(length);
   set_buffer(uncompressed_.data(), length);
   return true;
diff --git a/riegeli/snappy/hadoop/hadoop_snappy_writer.h b/riegeli/snappy/hadoop/hadoop_snappy_writer.h
index 5cb2e2a..fdca709 100644
--- a/riegeli/snappy/hadoop/hadoop_snappy_writer.h
+++ b/riegeli/snappy/hadoop/hadoop_snappy_writer.h
@@ -17,6 +17,7 @@
 
 #include <stddef.h>
 
+#include <limits>
 #include <optional>
 #include <utility>
 
@@ -110,6 +111,8 @@
   Reader* ReadModeBehindScratch(Position initial_pos) override;
 
  private:
+  static constexpr Position kMaxPosition = std::numeric_limits<Position>::max();
+
   // Compresses buffered data, but unlike `PushSlow()`, does not ensure that a
   // buffer is allocated.
   //
diff --git a/riegeli/snappy/snappy_writer.cc b/riegeli/snappy/snappy_writer.cc
index 8604482..8750322 100644
--- a/riegeli/snappy/snappy_writer.cc
+++ b/riegeli/snappy/snappy_writer.cc
@@ -73,8 +73,7 @@
   set_start_pos(pos());
   uncompressed_.RemoveSuffix(available());
   set_buffer();
-  if (ABSL_PREDICT_FALSE(IntCast<size_t>(start_pos()) >
-                         std::numeric_limits<uint32_t>::max())) {
+  if (ABSL_PREDICT_FALSE(IntCast<size_t>(start_pos()) > kMaxPosition)) {
     return FailOverflow();
   }
   return true;
@@ -114,6 +113,8 @@
          "enough space available, use Push() instead";
   if (ABSL_PREDICT_FALSE(!ok())) return false;
   if (ABSL_PREDICT_FALSE(!SyncBuffer())) return false;
+  // Use a higher limit than `kMaxPosition` here to allow creating a larger
+  // buffer near the end of the supported range and filling it partially.
   if (ABSL_PREDICT_FALSE(min_length > std::numeric_limits<size_t>::max() -
                                           IntCast<size_t>(start_pos()))) {
     return FailOverflow();
@@ -137,8 +138,8 @@
   if (src.size() <= MaxBytesToCopy()) return Writer::WriteSlow(std::move(src));
   if (ABSL_PREDICT_FALSE(!ok())) return false;
   if (ABSL_PREDICT_FALSE(!SyncBuffer())) return false;
-  if (ABSL_PREDICT_FALSE(src.size() > std::numeric_limits<uint32_t>::max() -
-                                          IntCast<size_t>(start_pos()))) {
+  if (ABSL_PREDICT_FALSE(src.size() >
+                         kMaxPosition - IntCast<size_t>(start_pos()))) {
     return FailOverflow();
   }
   move_start_pos(src.size());
@@ -153,8 +154,8 @@
   if (src.size() <= MaxBytesToCopy()) return Writer::WriteSlow(src);
   if (ABSL_PREDICT_FALSE(!ok())) return false;
   if (ABSL_PREDICT_FALSE(!SyncBuffer())) return false;
-  if (ABSL_PREDICT_FALSE(src.size() > std::numeric_limits<uint32_t>::max() -
-                                          IntCast<size_t>(start_pos()))) {
+  if (ABSL_PREDICT_FALSE(src.size() >
+                         kMaxPosition - IntCast<size_t>(start_pos()))) {
     return FailOverflow();
   }
   move_start_pos(src.size());
@@ -174,8 +175,8 @@
   }
   if (ABSL_PREDICT_FALSE(!ok())) return false;
   if (ABSL_PREDICT_FALSE(!SyncBuffer())) return false;
-  if (ABSL_PREDICT_FALSE(src.size() > std::numeric_limits<uint32_t>::max() -
-                                          IntCast<size_t>(start_pos()))) {
+  if (ABSL_PREDICT_FALSE(src.size() >
+                         kMaxPosition - IntCast<size_t>(start_pos()))) {
     return FailOverflow();
   }
   move_start_pos(src.size());
@@ -190,8 +191,8 @@
   if (src.size() <= MaxBytesToCopy()) return Writer::WriteSlow(src);
   if (ABSL_PREDICT_FALSE(!ok())) return false;
   if (ABSL_PREDICT_FALSE(!SyncBuffer())) return false;
-  if (ABSL_PREDICT_FALSE(src.size() > std::numeric_limits<uint32_t>::max() -
-                                          IntCast<size_t>(start_pos()))) {
+  if (ABSL_PREDICT_FALSE(src.size() >
+                         kMaxPosition - IntCast<size_t>(start_pos()))) {
     return FailOverflow();
   }
   move_start_pos(src.size());
@@ -211,8 +212,8 @@
   }
   if (ABSL_PREDICT_FALSE(!ok())) return false;
   if (ABSL_PREDICT_FALSE(!SyncBuffer())) return false;
-  if (ABSL_PREDICT_FALSE(src.size() > std::numeric_limits<uint32_t>::max() -
-                                          IntCast<size_t>(start_pos()))) {
+  if (ABSL_PREDICT_FALSE(src.size() >
+                         kMaxPosition - IntCast<size_t>(start_pos()))) {
     return FailOverflow();
   }
   move_start_pos(src.size());
@@ -225,10 +226,8 @@
       << "Failed precondition of Writer::WriteSlow(ByteFill): "
          "enough space available, use Write(ByteFill) instead";
   if (ABSL_PREDICT_FALSE(!ok())) return false;
-  if (ABSL_PREDICT_FALSE(IntCast<size_t>(pos()) >
-                             std::numeric_limits<uint32_t>::max() ||
-                         src.size() > std::numeric_limits<uint32_t>::max() -
-                                          IntCast<size_t>(pos()))) {
+  if (ABSL_PREDICT_FALSE(IntCast<size_t>(pos()) > kMaxPosition ||
+                         src.size() > kMaxPosition - IntCast<size_t>(pos()))) {
     return FailOverflow();
   }
   const size_t first_length = UnsignedMin(
diff --git a/riegeli/snappy/snappy_writer.h b/riegeli/snappy/snappy_writer.h
index d7a33cb..3afe962 100644
--- a/riegeli/snappy/snappy_writer.h
+++ b/riegeli/snappy/snappy_writer.h
@@ -16,7 +16,9 @@
 #define RIEGELI_SNAPPY_SNAPPY_WRITER_H_
 
 #include <stddef.h>
+#include <stdint.h>
 
+#include <limits>
 #include <optional>
 #include <type_traits>
 #include <utility>
@@ -121,6 +123,8 @@
   Reader* ReadModeImpl(Position initial_pos) override;
 
  private:
+  static constexpr size_t kMaxPosition = std::numeric_limits<uint32_t>::max();
+
   // `snappy::kBlockSize`
   static constexpr size_t kBlockSize = size_t{64} << 10;
 
diff --git a/riegeli/tensorflow/io/file_reader.cc b/riegeli/tensorflow/io/file_reader.cc
index fddb5cb..3c36de9 100644
--- a/riegeli/tensorflow/io/file_reader.cc
+++ b/riegeli/tensorflow/io/file_reader.cc
@@ -90,7 +90,7 @@
 }
 
 void FileReaderBase::InitializePos(Position initial_pos) {
-  if (ABSL_PREDICT_FALSE(initial_pos > std::numeric_limits<uint64_t>::max())) {
+  if (ABSL_PREDICT_FALSE(initial_pos > kMaxPosition)) {
     FailOverflow();
     return;
   }
@@ -176,11 +176,10 @@
 
 inline bool FileReaderBase::ReadToDest(size_t length,
                                        tsl::RandomAccessFile* src, char* dest) {
-  if (ABSL_PREDICT_FALSE(limit_pos() >= std::numeric_limits<uint64_t>::max())) {
+  if (ABSL_PREDICT_FALSE(limit_pos() >= kMaxPosition)) {
     return FailOverflow();
   }
-  const size_t length_to_read =
-      UnsignedMin(length, std::numeric_limits<uint64_t>::max() - limit_pos());
+  const size_t length_to_read = UnsignedMin(length, kMaxPosition - limit_pos());
   absl::string_view result;
   const absl::Status status = src->Read(IntCast<uint64_t>(limit_pos()), result,
                                         absl::MakeSpan(dest, length_to_read));
@@ -199,8 +198,8 @@
       << "RandomAccessFile::Read() succeeded but read less than requested";
   if (ABSL_PREDICT_FALSE(result.size() < length)) {
     // `result.size() == length_to_read < length`, which implies that
-    // `std::numeric_limits<uint64_t>::max()` was reached.
-    RIEGELI_ASSERT_EQ(limit_pos(), std::numeric_limits<uint64_t>::max())
+    // `kMaxPosition` was reached.
+    RIEGELI_ASSERT_EQ(limit_pos(), kMaxPosition)
         << "Maximum position must have been reached";
     return FailOverflow();
   }
@@ -214,13 +213,13 @@
                  buffer_.data() + buffer_.size())
       << "Failed precondition of FileReaderBase::ReadToBuffer(): "
          "flat_buffer not a suffix of buffer_";
-  if (ABSL_PREDICT_FALSE(limit_pos() >= std::numeric_limits<uint64_t>::max())) {
+  if (ABSL_PREDICT_FALSE(limit_pos() >= kMaxPosition)) {
     buffer_.RemoveSuffix(flat_buffer.size());
     set_buffer(buffer_.data(), buffer_.size(), cursor_index);
     return FailOverflow();
   }
-  const size_t length_to_read = UnsignedMin(
-      flat_buffer.size(), std::numeric_limits<uint64_t>::max() - limit_pos());
+  const size_t length_to_read =
+      UnsignedMin(flat_buffer.size(), kMaxPosition - limit_pos());
   absl::string_view result;
   const absl::Status status =
       src->Read(IntCast<uint64_t>(limit_pos()), result,
@@ -252,8 +251,8 @@
       << "RandomAccessFile::Read() succeeded but read less than requested";
   if (ABSL_PREDICT_FALSE(result.size() < flat_buffer.size())) {
     // `result.size() == length_to_read < flat_buffer.size()`, which implies
-    // that `std::numeric_limits<uint64_t>::max()` was reached.
-    RIEGELI_ASSERT_EQ(limit_pos(), std::numeric_limits<uint64_t>::max())
+    // that `kMaxPosition` was reached.
+    RIEGELI_ASSERT_EQ(limit_pos(), kMaxPosition)
         << "Maximum position must have been reached";
     return FailOverflow();
   }
diff --git a/riegeli/tensorflow/io/file_reader.h b/riegeli/tensorflow/io/file_reader.h
index b9f00b8..54702d7 100644
--- a/riegeli/tensorflow/io/file_reader.h
+++ b/riegeli/tensorflow/io/file_reader.h
@@ -16,7 +16,9 @@
 #define RIEGELI_TENSORFLOW_IO_FILE_READER_H_
 
 #include <stddef.h>
+#include <stdint.h>
 
+#include <limits>
 #include <memory>
 #include <optional>
 #include <string>
@@ -135,6 +137,9 @@
   }
 
  protected:
+  static constexpr Position kMaxPosition =
+      Position{std::numeric_limits<uint64_t>::max()};
+
   explicit FileReaderBase(Closed) noexcept : Reader(kClosed) {}
 
   explicit FileReaderBase(BufferOptions buffer_options, tsl::Env* env,
diff --git a/riegeli/tensorflow/io/file_writer.cc b/riegeli/tensorflow/io/file_writer.cc
index 1980fa4..00b16ef 100644
--- a/riegeli/tensorflow/io/file_writer.cc
+++ b/riegeli/tensorflow/io/file_writer.cc
@@ -155,13 +155,12 @@
          "enough space available, use Push() instead";
   if (ABSL_PREDICT_FALSE(!SyncBuffer())) return false;
   if (ABSL_PREDICT_FALSE(!ok())) return false;
-  if (ABSL_PREDICT_FALSE(min_length >
-                         std::numeric_limits<Position>::max() - start_pos())) {
+  if (ABSL_PREDICT_FALSE(min_length > kMaxPosition - start_pos())) {
     return FailOverflow();
   }
   const size_t buffer_length = UnsignedMin(
       buffer_sizer_.BufferLength(start_pos(), min_length, recommended_length),
-      std::numeric_limits<Position>::max() - start_pos());
+      kMaxPosition - start_pos());
   buffer_.Reset(buffer_length);
   set_buffer(buffer_.mutable_data(), buffer_length);
   return true;
@@ -174,8 +173,7 @@
   RIEGELI_ASSERT_OK(*this)
       << "Failed precondition of FileWriterBase::WriteInternal()";
   tsl::WritableFile* const dest = DestFile();
-  if (ABSL_PREDICT_FALSE(src.size() >
-                         std::numeric_limits<Position>::max() - start_pos())) {
+  if (ABSL_PREDICT_FALSE(src.size() > kMaxPosition - start_pos())) {
     return FailOverflow();
   }
   if (const absl::Status status = dest->Append(src);
@@ -281,8 +279,7 @@
   RIEGELI_ASSERT_OK(*this)
       << "Failed precondition of FileWriterBase::WriteInternal()";
   tsl::WritableFile* const dest = DestFile();
-  if (ABSL_PREDICT_FALSE(src.size() >
-                         std::numeric_limits<Position>::max() - start_pos())) {
+  if (ABSL_PREDICT_FALSE(src.size() > kMaxPosition - start_pos())) {
     return FailOverflow();
   }
   if (absl::Status status = dest->Append(src);
diff --git a/riegeli/tensorflow/io/file_writer.h b/riegeli/tensorflow/io/file_writer.h
index 1488ea8..f4dd622 100644
--- a/riegeli/tensorflow/io/file_writer.h
+++ b/riegeli/tensorflow/io/file_writer.h
@@ -16,7 +16,9 @@
 #define RIEGELI_TENSORFLOW_IO_FILE_WRITER_H_
 
 #include <stddef.h>
+#include <stdint.h>
 
+#include <limits>
 #include <memory>
 #include <optional>
 #include <string>
@@ -149,6 +151,9 @@
   Reader* ReadModeImpl(Position initial_pos) override;
 
  private:
+  static constexpr Position kMaxPosition =
+      Position{std::numeric_limits<int64_t>::max()};
+
   // Writes `buffer_` to the file. Sets buffer pointers to `nullptr`.
   bool SyncBuffer();
 
diff --git a/riegeli/xz/xz_reader.cc b/riegeli/xz/xz_reader.cc
index 7ae7837..7435ada 100644
--- a/riegeli/xz/xz_reader.cc
+++ b/riegeli/xz/xz_reader.cc
@@ -167,8 +167,7 @@
       << "Failed precondition of BufferedReader::ReadInternal()";
   Reader& src = *SrcReader();
   truncated_ = false;
-  max_length = UnsignedMin(max_length,
-                           std::numeric_limits<Position>::max() - limit_pos());
+  max_length = UnsignedMin(max_length, kMaxPosition - limit_pos());
   decompressor_->next_out = reinterpret_cast<uint8_t*>(dest);
   for (;;) {
     decompressor_->avail_out = PtrDistance(
@@ -188,8 +187,7 @@
           RIEGELI_ASSERT_EQ(decompressor_->avail_out, 0u)
               << "lzma_code() returned but there are still input data "
                  "and output space";
-          RIEGELI_ASSERT_EQ(length_read,
-                            std::numeric_limits<Position>::max() - limit_pos())
+          RIEGELI_ASSERT_EQ(length_read, kMaxPosition - limit_pos())
               << "The position does not overflow but the output buffer is "
                  "full, while less than min_length was output, which is "
                  "impossible because the buffer has size max_length which is "
diff --git a/riegeli/xz/xz_reader.h b/riegeli/xz/xz_reader.h
index c5f05b7..42a8a15 100644
--- a/riegeli/xz/xz_reader.h
+++ b/riegeli/xz/xz_reader.h
@@ -18,6 +18,7 @@
 #include <stddef.h>
 #include <stdint.h>
 
+#include <limits>
 #include <memory>
 #include <utility>
 
@@ -186,6 +187,8 @@
     Container container;
   };
 
+  static constexpr Position kMaxPosition = std::numeric_limits<Position>::max();
+
   void InitializeDecompressor();
   ABSL_ATTRIBUTE_COLD bool FailOperation(absl::string_view operation,
                                          lzma_ret liblzma_code);
diff --git a/riegeli/xz/xz_writer.cc b/riegeli/xz/xz_writer.cc
index 32e37b5..b4497f8 100644
--- a/riegeli/xz/xz_writer.cc
+++ b/riegeli/xz/xz_writer.cc
@@ -17,7 +17,6 @@
 #include <stddef.h>
 #include <stdint.h>
 
-#include <limits>
 #include <memory>
 #include <utility>
 
@@ -166,8 +165,7 @@
                                         lzma_action flush) {
   RIEGELI_ASSERT_OK(*this)
       << "Failed precondition of XzWriterBase::WriteInternal()";
-  if (ABSL_PREDICT_FALSE(src.size() >
-                         std::numeric_limits<Position>::max() - start_pos())) {
+  if (ABSL_PREDICT_FALSE(src.size() > kMaxPosition - start_pos())) {
     return FailOverflow();
   }
   compressor_->next_in = reinterpret_cast<const uint8_t*>(src.data());
diff --git a/riegeli/xz/xz_writer.h b/riegeli/xz/xz_writer.h
index 53af298..3776c7c 100644
--- a/riegeli/xz/xz_writer.h
+++ b/riegeli/xz/xz_writer.h
@@ -17,6 +17,7 @@
 
 #include <stdint.h>
 
+#include <limits>
 #include <utility>
 
 #include "absl/base/attributes.h"
@@ -259,6 +260,8 @@
     uint32_t preset;
   };
 
+  static constexpr Position kMaxPosition = std::numeric_limits<Position>::max();
+
   ABSL_ATTRIBUTE_COLD bool FailOperation(absl::string_view operation,
                                          lzma_ret liblzma_code);
   bool WriteInternal(absl::string_view src, Writer& dest, lzma_action flush);
diff --git a/riegeli/zlib/zlib_reader.cc b/riegeli/zlib/zlib_reader.cc
index c16d1a5..8757c72 100644
--- a/riegeli/zlib/zlib_reader.cc
+++ b/riegeli/zlib/zlib_reader.cc
@@ -17,7 +17,6 @@
 #include <stddef.h>
 #include <stdint.h>
 
-#include <limits>
 #include <memory>
 #include <optional>
 #include <utility>
@@ -143,8 +142,7 @@
       << "Failed precondition of BufferedReader::ReadInternal()";
   Reader& src = *SrcReader();
   truncated_ = false;
-  max_length = UnsignedMin(max_length,
-                           std::numeric_limits<Position>::max() - limit_pos());
+  max_length = UnsignedMin(max_length, kMaxPosition - limit_pos());
   z_stream* const z_stream_ptr = static_cast<z_stream*>(decompressor_.get());
   z_stream_ptr->next_out = reinterpret_cast<Bytef*>(dest);
   for (;;) {
@@ -167,8 +165,7 @@
           RIEGELI_ASSERT_EQ(z_stream_ptr->avail_out, 0u)
               << "inflate() returned but there are still input data "
                  "and output space";
-          RIEGELI_ASSERT_EQ(length_read,
-                            std::numeric_limits<Position>::max() - limit_pos())
+          RIEGELI_ASSERT_EQ(length_read, kMaxPosition - limit_pos())
               << "The position does not overflow but the output buffer is "
                  "full, while less than min_length was output, which is "
                  "impossible because the buffer has size max_length which is "
diff --git a/riegeli/zlib/zlib_reader.h b/riegeli/zlib/zlib_reader.h
index 42639c9..5f86413 100644
--- a/riegeli/zlib/zlib_reader.h
+++ b/riegeli/zlib/zlib_reader.h
@@ -18,6 +18,7 @@
 #include <stddef.h>
 #include <stdint.h>
 
+#include <limits>
 #include <memory>
 #include <optional>
 #include <utility>
@@ -220,6 +221,8 @@
     void operator()(void* ptr) const;
   };
 
+  static constexpr Position kMaxPosition = std::numeric_limits<Position>::max();
+
   void InitializeDecompressor();
   ABSL_ATTRIBUTE_COLD bool FailOperation(absl::string_view operation,
                                          int zlib_code);
diff --git a/riegeli/zlib/zlib_writer.cc b/riegeli/zlib/zlib_writer.cc
index 1ac4de5..672c61f 100644
--- a/riegeli/zlib/zlib_writer.cc
+++ b/riegeli/zlib/zlib_writer.cc
@@ -163,8 +163,7 @@
                                           int flush) {
   RIEGELI_ASSERT_OK(*this)
       << "Failed precondition of ZlibWriterBase::WriteInternal()";
-  if (ABSL_PREDICT_FALSE(src.size() >
-                         std::numeric_limits<Position>::max() - start_pos())) {
+  if (ABSL_PREDICT_FALSE(src.size() > kMaxPosition - start_pos())) {
     return FailOverflow();
   }
   z_stream* const z_stream_ptr = static_cast<z_stream*>(compressor_.get());
diff --git a/riegeli/zlib/zlib_writer.h b/riegeli/zlib/zlib_writer.h
index 95b3629..39d65a7 100644
--- a/riegeli/zlib/zlib_writer.h
+++ b/riegeli/zlib/zlib_writer.h
@@ -15,6 +15,7 @@
 #ifndef RIEGELI_ZLIB_ZLIB_WRITER_H_
 #define RIEGELI_ZLIB_ZLIB_WRITER_H_
 
+#include <limits>
 #include <utility>
 
 #include "absl/base/attributes.h"
@@ -230,6 +231,8 @@
     int window_bits;
   };
 
+  static constexpr Position kMaxPosition = std::numeric_limits<Position>::max();
+
   ABSL_ATTRIBUTE_COLD bool FailOperation(absl::string_view operation,
                                          int zlib_code);
   bool WriteInternal(absl::string_view src, Writer& dest, int flush);
diff --git a/riegeli/zstd/zstd_reader.cc b/riegeli/zstd/zstd_reader.cc
index 2ec379a..449e316 100644
--- a/riegeli/zstd/zstd_reader.cc
+++ b/riegeli/zstd/zstd_reader.cc
@@ -187,8 +187,7 @@
     effective_min_length = std::numeric_limits<size_t>::max();
   }
   just_initialized_ = false;
-  max_length = UnsignedMin(max_length,
-                           std::numeric_limits<Position>::max() - limit_pos());
+  max_length = UnsignedMin(max_length, kMaxPosition - limit_pos());
   ZSTD_outBuffer output = {dest, max_length, 0};
   for (;;) {
     ZSTD_inBuffer input = {src.cursor(), src.available(), 0};
@@ -223,8 +222,7 @@
       RIEGELI_ASSERT_EQ(output.pos, output.size)
           << "ZSTD_decompressStream() returned but there are still "
              "input data and output space";
-      RIEGELI_ASSERT_EQ(output.pos,
-                        std::numeric_limits<Position>::max() - limit_pos())
+      RIEGELI_ASSERT_EQ(output.pos, kMaxPosition - limit_pos())
           << "The position does not overflow but the output buffer is full, "
              "while less than min_length was output, which implies that "
              "ZSTD_decompressStream() wants to output more than the "
diff --git a/riegeli/zstd/zstd_reader.h b/riegeli/zstd/zstd_reader.h
index db33665..ac09996 100644
--- a/riegeli/zstd/zstd_reader.h
+++ b/riegeli/zstd/zstd_reader.h
@@ -18,6 +18,7 @@
 #include <stddef.h>
 #include <stdint.h>
 
+#include <limits>
 #include <memory>
 #include <optional>
 #include <utility>
@@ -184,6 +185,8 @@
     void operator()(ZSTD_DCtx* ptr) const { ZSTD_freeDCtx(ptr); }
   };
 
+  static constexpr Position kMaxPosition = std::numeric_limits<Position>::max();
+
   void InitializeDecompressor(Reader& src);
 
   // If `true`, supports decompressing as much as possible from a truncated
diff --git a/riegeli/zstd/zstd_writer.cc b/riegeli/zstd/zstd_writer.cc
index 54792bf..3813554 100644
--- a/riegeli/zstd/zstd_writer.cc
+++ b/riegeli/zstd/zstd_writer.cc
@@ -24,7 +24,6 @@
 
 #include <stddef.h>
 
-#include <limits>
 #include <memory>
 #include <optional>
 #include <utility>
@@ -212,8 +211,7 @@
                                           ZSTD_EndDirective end_op) {
   RIEGELI_ASSERT_OK(*this)
       << "Failed precondition of ZstdWriterBase::WriteInternal()";
-  if (ABSL_PREDICT_FALSE(src.size() >
-                         std::numeric_limits<Position>::max() - start_pos())) {
+  if (ABSL_PREDICT_FALSE(src.size() > kMaxPosition - start_pos())) {
     return FailOverflow();
   }
   if (pledged_size_ != std::nullopt) {
diff --git a/riegeli/zstd/zstd_writer.h b/riegeli/zstd/zstd_writer.h
index ccbb801..82edd3a 100644
--- a/riegeli/zstd/zstd_writer.h
+++ b/riegeli/zstd/zstd_writer.h
@@ -17,6 +17,7 @@
 
 #include <stddef.h>
 
+#include <limits>
 #include <optional>
 #include <utility>
 
@@ -321,6 +322,8 @@
     void operator()(ZSTD_CCtx* ptr) const { ZSTD_freeCCtx(ptr); }
   };
 
+  static constexpr Position kMaxPosition = std::numeric_limits<Position>::max();
+
   bool WriteInternal(absl::string_view src, Writer& dest,
                      ZSTD_EndDirective end_op);