[libcxx-commits] [libcxx] [libc++] Remove string external instantiations that just call _Traits::length (PR #160673)

Nikolas Klauser via libcxx-commits libcxx-commits at lists.llvm.org
Fri Oct 10 04:15:33 PDT 2025


https://github.com/philnik777 updated https://github.com/llvm/llvm-project/pull/160673

>From 90fdab9ff757b8355eaa04a38e020aeb678d74f5 Mon Sep 17 00:00:00 2001
From: Nikolas Klauser <nikolasklauser at berlin.de>
Date: Thu, 25 Sep 2025 11:31:53 +0200
Subject: [PATCH] [libc++] Remove string external instantiations that just call
 _Traits::length

---
 libcxx/include/__string/extern_template_lists.h |  7 -------
 libcxx/src/string.cpp                           | 10 +++++++++-
 2 files changed, 9 insertions(+), 8 deletions(-)

diff --git a/libcxx/include/__string/extern_template_lists.h b/libcxx/include/__string/extern_template_lists.h
index 18f0ff9f11bd5..805ee4b7e5fdc 100644
--- a/libcxx/include/__string/extern_template_lists.h
+++ b/libcxx/include/__string/extern_template_lists.h
@@ -37,16 +37,13 @@
     Func(basic_string<CharT>& basic_string<CharT>::assign(size_type, value_type))                                      \
     Func(basic_string<CharT>& basic_string<CharT>::assign(const basic_string&, size_type, size_type))                  \
     Func(basic_string<CharT>& basic_string<CharT>::append(size_type, value_type))                                      \
-    Func(basic_string<CharT>& basic_string<CharT>::append(const value_type*))                                          \
     Func(basic_string<CharT>& basic_string<CharT>::append(const value_type*, size_type))                               \
     Func(basic_string<CharT>& basic_string<CharT>::append(const basic_string&, size_type, size_type))                  \
     Func(void basic_string<CharT>::push_back(value_type))                                                              \
-    Func(basic_string<CharT>& basic_string<CharT>::insert(size_type, const value_type*))                               \
     Func(basic_string<CharT>& basic_string<CharT>::insert(size_type, size_type, value_type))                           \
     Func(basic_string<CharT>& basic_string<CharT>::insert(size_type, const value_type*, size_type))                    \
     Func(basic_string<CharT>& basic_string<CharT>::insert(size_type, const basic_string&, size_type, size_type))       \
     Func(basic_string<CharT>::iterator basic_string<CharT>::insert(basic_string::const_iterator, value_type))          \
-    Func(basic_string<CharT>& basic_string<CharT>::replace(size_type, size_type, const value_type*))                   \
     Func(basic_string<CharT>& basic_string<CharT>::replace(size_type, size_type, size_type, value_type))               \
     Func(basic_string<CharT>& basic_string<CharT>::replace(size_type, size_type, const value_type*, size_type))        \
     Func(basic_string<CharT>& basic_string<CharT>::replace(size_type, size_type, const basic_string&, size_type, size_type)) \
@@ -64,8 +61,6 @@
     Func(basic_string<CharT>::size_type basic_string<CharT>::find_last_not_of(const value_type*, size_type, size_type) const) \
     Func(CharT& basic_string<CharT>::at(size_type))                                                                    \
     Func(const CharT& basic_string<CharT>::at(size_type) const)                                                        \
-    Func(int basic_string<CharT>::compare(const value_type*) const)                                                    \
-    Func(int basic_string<CharT>::compare(size_type, size_type, const value_type*) const)                              \
     Func(int basic_string<CharT>::compare(size_type, size_type, const value_type*, size_type) const)                   \
     Func(int basic_string<CharT>::compare(size_type, size_type, const basic_string&, size_type, size_type) const)      \
     Func(const basic_string<CharT>::size_type basic_string<CharT>::npos)                                               \
@@ -74,7 +69,6 @@
   _LIBCPP_STRING_COMMON_EXTERN_TEMPLATE_LIST(Func, CharT)                                                              \
   Func(basic_string<CharT>::basic_string(const basic_string&))                                                         \
   Func(basic_string<CharT>::basic_string(const basic_string&, const allocator<CharT>&))                                \
-  Func(basic_string<CharT>& basic_string<CharT>::assign(const value_type*))                                            \
   Func(basic_string<CharT>& basic_string<CharT>::assign(const value_type*, size_type))                                 \
   Func(basic_string<CharT>& basic_string<CharT>::operator=(basic_string const&))                                       \
   Func(void basic_string<CharT>::__grow_by(size_type, size_type, size_type, size_type, size_type, size_type))          \
@@ -84,7 +78,6 @@
   _LIBCPP_STRING_COMMON_EXTERN_TEMPLATE_LIST(Func, CharT)                                                              \
   Func(void basic_string<CharT>::__init_copy_ctor_external(const value_type*, size_type))                              \
   Func(basic_string<CharT>& basic_string<CharT>::__assign_external(const value_type*, size_type))                      \
-  Func(basic_string<CharT>& basic_string<CharT>::__assign_external(const value_type*))                                 \
   Func(basic_string<CharT>& basic_string<CharT>::__assign_no_alias<false>(const value_type*, size_type))               \
   Func(basic_string<CharT>& basic_string<CharT>::__assign_no_alias<true>(const value_type*, size_type))                \
   Func(void basic_string<CharT>::__erase_external_with_move(size_type, size_type))
diff --git a/libcxx/src/string.cpp b/libcxx/src/string.cpp
index 5028fc88fe46d..31096013ba4d8 100644
--- a/libcxx/src/string.cpp
+++ b/libcxx/src/string.cpp
@@ -54,7 +54,15 @@ void basic_string<_CharT, _Traits, _Allocator>::__init(const value_type* __s, si
 }
 
 #  define STRING_LEGACY_API(CharT)                                                                                     \
-    template _LIBCPP_EXPORTED_FROM_ABI void basic_string<CharT>::__init(const value_type*, size_type, size_type)
+    template _LIBCPP_EXPORTED_FROM_ABI void basic_string<CharT>::__init(const value_type*, size_type, size_type);      \
+    template _LIBCPP_EXPORTED_FROM_ABI basic_string<CharT>& basic_string<CharT>::append(const value_type*);            \
+    template _LIBCPP_EXPORTED_FROM_ABI basic_string<CharT>& basic_string<CharT>::insert(size_type, const value_type*); \
+    template _LIBCPP_EXPORTED_FROM_ABI basic_string<CharT>& basic_string<CharT>::replace(                              \
+        size_type, size_type, const value_type*);                                                                      \
+    template _LIBCPP_EXPORTED_FROM_ABI int basic_string<CharT>::compare(const value_type*) const;                      \
+    template _LIBCPP_EXPORTED_FROM_ABI int basic_string<CharT>::compare(size_type, size_type, const value_type*)       \
+        const;                                                                                                         \
+    template _LIBCPP_EXPORTED_FROM_ABI basic_string<CharT>& basic_string<CharT>::assign(const value_type*)
 
 STRING_LEGACY_API(char);
 #  if _LIBCPP_HAS_WIDE_CHARACTERS



More information about the libcxx-commits mailing list