diff --git a/core/fpdftext/cpdf_linkextract.cpp b/core/fpdftext/cpdf_linkextract.cpp
index ab6c395..431b555 100644
--- a/core/fpdftext/cpdf_linkextract.cpp
+++ b/core/fpdftext/cpdf_linkextract.cpp
@@ -6,6 +6,8 @@
 
 #include "core/fpdftext/cpdf_linkextract.h"
 
+#include <wchar.h>
+
 #include <vector>
 
 #include "core/fpdftext/cpdf_textpage.h"
@@ -181,8 +183,8 @@
   static const wchar_t kHttpScheme[] = L"http";
   static const wchar_t kWWWAddrStart[] = L"www.";
 
-  const size_t kHttpSchemeLen = FXSYS_len(kHttpScheme);
-  const size_t kWWWAddrStartLen = FXSYS_len(kWWWAddrStart);
+  const size_t kHttpSchemeLen = wcslen(kHttpScheme);
+  const size_t kWWWAddrStartLen = wcslen(kWWWAddrStart);
 
   WideString str = strBeCheck;
   str.MakeLower();
diff --git a/core/fxcrt/fx_memcpy_wrappers.h b/core/fxcrt/fx_memcpy_wrappers.h
index 2dc8c1c..7751eee 100644
--- a/core/fxcrt/fx_memcpy_wrappers.h
+++ b/core/fxcrt/fx_memcpy_wrappers.h
@@ -58,29 +58,4 @@
   return len ? wmemchr(ptr1, val, len) : nullptr;
 }
 
-// Overloaded functions for C++ templates
-inline size_t FXSYS_len(const char* ptr) {
-  return strlen(ptr);
-}
-
-inline size_t FXSYS_len(const wchar_t* ptr) {
-  return wcslen(ptr);
-}
-
-inline int FXSYS_cmp(const char* ptr1, const char* ptr2, size_t len) {
-  return FXSYS_memcmp(ptr1, ptr2, len);
-}
-
-inline int FXSYS_cmp(const wchar_t* ptr1, const wchar_t* ptr2, size_t len) {
-  return FXSYS_wmemcmp(ptr1, ptr2, len);
-}
-
-inline const char* FXSYS_chr(const char* ptr, char ch, size_t len) {
-  return reinterpret_cast<const char*>(FXSYS_memchr(ptr, ch, len));
-}
-
-inline const wchar_t* FXSYS_chr(const wchar_t* ptr, wchar_t ch, size_t len) {
-  return FXSYS_wmemchr(ptr, ch, len);
-}
-
 #endif  // CORE_FXCRT_FX_MEMCPY_WRAPPERS_H_
diff --git a/core/fxcrt/string_view_template.h b/core/fxcrt/string_view_template.h
index b0e3864..e65ee28 100644
--- a/core/fxcrt/string_view_template.h
+++ b/core/fxcrt/string_view_template.h
@@ -12,6 +12,7 @@
 #include <algorithm>
 #include <iterator>
 #include <optional>
+#include <string>
 #include <type_traits>
 
 #include "core/fxcrt/compiler_specific.h"
@@ -48,7 +49,7 @@
   // NOLINTNEXTLINE(runtime/explicit)
   StringViewTemplate(const CharType* ptr) noexcept
       : m_Span(reinterpret_cast<const UnsignedType*>(ptr),
-               ptr ? FXSYS_len(ptr) : 0) {}
+               ptr ? std::char_traits<CharType>::length(ptr) : 0) {}
 
   constexpr StringViewTemplate(const CharType* ptr, size_t size) noexcept
       : m_Span(reinterpret_cast<const UnsignedType*>(ptr), size) {}
@@ -79,7 +80,8 @@
 
   StringViewTemplate& operator=(const CharType* src) {
     m_Span = pdfium::span<const UnsignedType>(
-        reinterpret_cast<const UnsignedType*>(src), src ? FXSYS_len(src) : 0);
+        reinterpret_cast<const UnsignedType*>(src),
+        src ? std::char_traits<CharType>::length(src) : 0);
     return *this;
   }
 
@@ -196,8 +198,10 @@
   UnsignedType Back() const { return !m_Span.empty() ? m_Span.back() : 0; }
 
   std::optional<size_t> Find(CharType ch) const {
-    const auto* found = reinterpret_cast<const UnsignedType*>(FXSYS_chr(
-        reinterpret_cast<const CharType*>(m_Span.data()), ch, m_Span.size()));
+    const auto* found =
+        reinterpret_cast<const UnsignedType*>(std::char_traits<CharType>::find(
+            reinterpret_cast<const CharType*>(m_Span.data()), m_Span.size(),
+            ch));
 
     return found ? std::optional<size_t>(found - m_Span.data()) : std::nullopt;
   }
@@ -252,18 +256,24 @@
   }
 
   bool operator<(const StringViewTemplate& that) const {
+    const size_t common_size = std::min(m_Span.size(), that.m_Span.size());
     int result =
-        FXSYS_cmp(reinterpret_cast<const CharType*>(m_Span.data()),
-                  reinterpret_cast<const CharType*>(that.m_Span.data()),
-                  std::min(m_Span.size(), that.m_Span.size()));
+        common_size ? std::char_traits<CharType>::compare(
+                          reinterpret_cast<const CharType*>(m_Span.data()),
+                          reinterpret_cast<const CharType*>(that.m_Span.data()),
+                          common_size)
+                    : 0;
     return result < 0 || (result == 0 && m_Span.size() < that.m_Span.size());
   }
 
   bool operator>(const StringViewTemplate& that) const {
+    const size_t common_size = std::min(m_Span.size(), that.m_Span.size());
     int result =
-        FXSYS_cmp(reinterpret_cast<const CharType*>(m_Span.data()),
-                  reinterpret_cast<const CharType*>(that.m_Span.data()),
-                  std::min(m_Span.size(), that.m_Span.size()));
+        common_size ? std::char_traits<CharType>::compare(
+                          reinterpret_cast<const CharType*>(m_Span.data()),
+                          reinterpret_cast<const CharType*>(that.m_Span.data()),
+                          common_size)
+                    : 0;
     return result > 0 || (result == 0 && m_Span.size() > that.m_Span.size());
   }
 
