diff --git a/src/io/linux/ProcPath.hxx b/src/io/linux/ProcPath.hxx
index 8a780defe..9e562d98c 100644
--- a/src/io/linux/ProcPath.hxx
+++ b/src/io/linux/ProcPath.hxx
@@ -13,7 +13,7 @@
  * descriptor.
  */
 [[gnu::const]]
-inline StringBuffer<32>
+constexpr StringBuffer<32>
 ProcFdPath(FileDescriptor fd) noexcept
 {
 	return FmtBuffer<32>("/proc/self/fd/{}", fd.Get());
@@ -24,7 +24,7 @@ ProcFdPath(FileDescriptor fd) noexcept
  * descriptor.
  */
 [[gnu::const]]
-inline StringBuffer<32>
+constexpr StringBuffer<32>
 ProcFdinfoPath(FileDescriptor fd) noexcept
 {
 	return FmtBuffer<32>("/proc/self/fdinfo/{}", fd.Get());
diff --git a/src/lib/fmt/ToBuffer.hxx b/src/lib/fmt/ToBuffer.hxx
index 01f6102f5..1520c0e0c 100644
--- a/src/lib/fmt/ToBuffer.hxx
+++ b/src/lib/fmt/ToBuffer.hxx
@@ -8,7 +8,7 @@
 #include <fmt/core.h>
 
 template<std::size_t size>
-StringBuffer<size> &
+constexpr StringBuffer<size> &
 VFmtToBuffer(StringBuffer<size> &buffer,
 	     fmt::string_view format_str, fmt::format_args args) noexcept
 {
@@ -20,7 +20,7 @@ VFmtToBuffer(StringBuffer<size> &buffer,
 
 template<std::size_t size>
 [[nodiscard]] [[gnu::pure]]
-auto
+constexpr auto
 VFmtBuffer(fmt::string_view format_str, fmt::format_args args) noexcept
 {
 	StringBuffer<size> buffer;
@@ -28,7 +28,7 @@ VFmtBuffer(fmt::string_view format_str, fmt::format_args args) noexcept
 }
 
 template<std::size_t size, typename S, typename... Args>
-StringBuffer<size> &
+constexpr StringBuffer<size> &
 FmtToBuffer(StringBuffer<size> &buffer,
 	    const S &format_str, Args&&... args) noexcept
 {
@@ -38,7 +38,7 @@ FmtToBuffer(StringBuffer<size> &buffer,
 
 template<std::size_t size, typename S, typename... Args>
 [[nodiscard]] [[gnu::pure]]
-auto
+constexpr auto
 FmtBuffer(const S &format_str, Args&&... args) noexcept
 {
 	return VFmtBuffer<size>(format_str,