[libcxx-commits] [libcxx] [libc++] Use std::to_chars to format thread::id (PR #181624)
Nikolas Klauser via libcxx-commits
libcxx-commits at lists.llvm.org
Mon Feb 16 04:00:58 PST 2026
https://github.com/philnik777 updated https://github.com/llvm/llvm-project/pull/181624
>From 037030f7c43ea7d4aca216ad253fc57b93dbbc45 Mon Sep 17 00:00:00 2001
From: Nikolas Klauser <nikolasklauser at berlin.de>
Date: Mon, 16 Feb 2026 11:40:25 +0100
Subject: [PATCH] [libc++] Use std::to_string to format thread::id
---
libcxx/include/__thread/thread.h | 17 ++++++++---------
libcxx/include/future | 5 +++++
libcxx/include/thread | 5 +++++
.../test/libcxx/transitive_includes/cxx26.csv | 13 -------------
4 files changed, 18 insertions(+), 22 deletions(-)
diff --git a/libcxx/include/__thread/thread.h b/libcxx/include/__thread/thread.h
index b2f51aa816c10..6de63117d74e2 100644
--- a/libcxx/include/__thread/thread.h
+++ b/libcxx/include/__thread/thread.h
@@ -11,12 +11,13 @@
#define _LIBCPP___THREAD_THREAD_H
#include <__assert>
+#include <__charconv/to_chars_integral.h>
#include <__condition_variable/condition_variable.h>
#include <__config>
#include <__exception/terminate.h>
#include <__functional/hash.h>
#include <__functional/unary_function.h>
-#include <__locale>
+#include <__fwd/ostream.h>
#include <__memory/addressof.h>
#include <__memory/unique_ptr.h>
#include <__mutex/mutex.h>
@@ -30,12 +31,9 @@
#include <__type_traits/is_same.h>
#include <__type_traits/remove_cvref.h>
#include <__utility/forward.h>
+#include <limits>
#include <tuple>
-#if _LIBCPP_HAS_LOCALIZATION
-# include <sstream>
-#endif
-
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
# pragma GCC system_header
#endif
@@ -147,10 +145,11 @@ operator<<(basic_ostream<_CharT, _Traits>& __os, __thread_id __id) {
// use a temporary stream instead and just output the thread
// id representation as a string.
- basic_ostringstream<_CharT, _Traits> __sstr;
- __sstr.imbue(locale::classic());
- __sstr << __id.__id_;
- return __os << __sstr.str();
+ static const size_t __buffer_size = numeric_limits<__libcpp_thread_id>::digits10 + 1;
+ char __buffer[__buffer_size];
+ std::__to_chars_integral(__buffer, __buffer + __buffer_size, __id.__id_, 10);
+
+ return __os << __buffer;
}
# endif // _LIBCPP_HAS_LOCALIZATION
diff --git a/libcxx/include/future b/libcxx/include/future
index 4084148e52af6..a99a7ae486490 100644
--- a/libcxx/include/future
+++ b/libcxx/include/future
@@ -2075,6 +2075,11 @@ _LIBCPP_POP_MACROS
# include <system_error>
# include <thread>
# endif
+
+# if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 23
+# include <sstream>
+# endif
+
#endif // __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS)
#endif // _LIBCPP_FUTURE
diff --git a/libcxx/include/thread b/libcxx/include/thread
index 029ed418e2070..e14e47d02788b 100644
--- a/libcxx/include/thread
+++ b/libcxx/include/thread
@@ -128,6 +128,11 @@ void sleep_for(const chrono::duration<Rep, Period>& rel_time);
# include <system_error>
# include <type_traits>
# endif
+
+# if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 23
+# include <sstream>
+# endif
+
#endif // __cplusplus < 201103L && defined(_LIBCPP_USE_FROZEN_CXX03_HEADERS)
#endif // _LIBCPP_THREAD
diff --git a/libcxx/test/libcxx/transitive_includes/cxx26.csv b/libcxx/test/libcxx/transitive_includes/cxx26.csv
index c11fb5ac10016..d2667ece5123c 100644
--- a/libcxx/test/libcxx/transitive_includes/cxx26.csv
+++ b/libcxx/test/libcxx/transitive_includes/cxx26.csv
@@ -425,29 +425,21 @@ functional tuple
functional typeinfo
functional unordered_map
functional version
-future bitset
future cctype
future cerrno
future climits
-future clocale
future compare
-future cstddef
future cstdint
future cstdio
-future cstdlib
future cstring
future ctime
future cwchar
future cwctype
future initializer_list
-future ios
future iosfwd
-future istream
future limits
future ratio
-future sstream
future stdexcept
-future streambuf
future string
future string_view
future tuple
@@ -1050,7 +1042,6 @@ system_error tuple
system_error version
thread array
thread atomic
-thread bitset
thread cctype
thread cerrno
thread climits
@@ -1065,14 +1056,10 @@ thread ctime
thread cwchar
thread cwctype
thread initializer_list
-thread ios
thread iosfwd
-thread istream
thread limits
thread ratio
-thread sstream
thread stdexcept
-thread streambuf
thread string
thread string_view
thread tuple
More information about the libcxx-commits
mailing list