From 0ec57b5e3ab4e9744ed978065d8773bef18e53b9 Mon Sep 17 00:00:00 2001 From: Nikolas Klauser 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& basic_string::assign(size_type, value_type)) \ Func(basic_string& basic_string::assign(const basic_string&, size_type, size_type)) \ Func(basic_string& basic_string::append(size_type, value_type)) \ - Func(basic_string& basic_string::append(const value_type*)) \ Func(basic_string& basic_string::append(const value_type*, size_type)) \ Func(basic_string& basic_string::append(const basic_string&, size_type, size_type)) \ Func(void basic_string::push_back(value_type)) \ - Func(basic_string& basic_string::insert(size_type, const value_type*)) \ Func(basic_string& basic_string::insert(size_type, size_type, value_type)) \ Func(basic_string& basic_string::insert(size_type, const value_type*, size_type)) \ Func(basic_string& basic_string::insert(size_type, const basic_string&, size_type, size_type)) \ Func(basic_string::iterator basic_string::insert(basic_string::const_iterator, value_type)) \ - Func(basic_string& basic_string::replace(size_type, size_type, const value_type*)) \ Func(basic_string& basic_string::replace(size_type, size_type, size_type, value_type)) \ Func(basic_string& basic_string::replace(size_type, size_type, const value_type*, size_type)) \ Func(basic_string& basic_string::replace(size_type, size_type, const basic_string&, size_type, size_type)) \ @@ -64,8 +61,6 @@ Func(basic_string::size_type basic_string::find_last_not_of(const value_type*, size_type, size_type) const) \ Func(CharT& basic_string::at(size_type)) \ Func(const CharT& basic_string::at(size_type) const) \ - Func(int basic_string::compare(const value_type*) const) \ - Func(int basic_string::compare(size_type, size_type, const value_type*) const) \ Func(int basic_string::compare(size_type, size_type, const value_type*, size_type) const) \ Func(int basic_string::compare(size_type, size_type, const basic_string&, size_type, size_type) const) \ Func(const basic_string::size_type basic_string::npos) \ @@ -74,7 +69,6 @@ _LIBCPP_STRING_COMMON_EXTERN_TEMPLATE_LIST(Func, CharT) \ Func(basic_string::basic_string(const basic_string&)) \ Func(basic_string::basic_string(const basic_string&, const allocator&)) \ - Func(basic_string& basic_string::assign(const value_type*)) \ Func(basic_string& basic_string::assign(const value_type*, size_type)) \ Func(basic_string& basic_string::operator=(basic_string const&)) \ Func(void basic_string::__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::__init_copy_ctor_external(const value_type*, size_type)) \ Func(basic_string& basic_string::__assign_external(const value_type*, size_type)) \ - Func(basic_string& basic_string::__assign_external(const value_type*)) \ Func(basic_string& basic_string::__assign_no_alias(const value_type*, size_type)) \ Func(basic_string& basic_string::__assign_no_alias(const value_type*, size_type)) \ Func(void basic_string::__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::__init(const value_type*, size_type, size_type) + template _LIBCPP_EXPORTED_FROM_ABI void basic_string::__init(const value_type*, size_type, size_type); \ + template _LIBCPP_EXPORTED_FROM_ABI basic_string& basic_string::append(const value_type*); \ + template _LIBCPP_EXPORTED_FROM_ABI basic_string& basic_string::insert(size_type, const value_type*); \ + template _LIBCPP_EXPORTED_FROM_ABI basic_string& basic_string::replace( \ + size_type, size_type, const value_type*); \ + template _LIBCPP_EXPORTED_FROM_ABI int basic_string::compare(const value_type*) const; \ + template _LIBCPP_EXPORTED_FROM_ABI int basic_string::compare(size_type, size_type, const value_type*) \ + const; \ + template _LIBCPP_EXPORTED_FROM_ABI basic_string& basic_string::assign(const value_type*) STRING_LEGACY_API(char); # if _LIBCPP_HAS_WIDE_CHARACTERS