[gcc r17-2409] libstdc++: Fix std module to work with --disable-wchar_t [PR126111]
Jonathan Wakely
redi@gcc.gnu.org
Wed Jul 15 11:10:30 GMT 2026
https://gcc.gnu.org/g:fb0c03ee7afca608cba0419629184b8f442085e2
commit r17-2409-gfb0c03ee7afca608cba0419629184b8f442085e2
Author: Jonathan Wakely <jwakely@redhat.com>
Date: Mon Jul 13 17:57:50 2026 +0100
libstdc++: Fix std module to work with --disable-wchar_t [PR126111]
We should not try to export names which are not declared if GCC is
configured with --disable-wchar_t.
We should also not define the wide stream aliases in <syncstream> and
<spanstream>.
libstdc++-v3/ChangeLog:
PR libstdc++/126111
* include/std/format (__format::__write_escape_seq): Remove
unnecessary alias declaration.
* include/std/spanstream (wspanbuf, wispanstream, wospanstream)
(wspanstream): Only declare for _GLIBCXX_USE_WCHAR_T.
* include/std/syncstream (wsyncbuf wosyncstream): Likewise.
* src/c++23/std.cc.in: Add preprocessor checks for
_GLIBCXX_USE_WCHAR_T to names which depend on it.
Reviewed-by: Tomasz Kamiński <tkaminsk@redhat.com>
Diff:
---
libstdc++-v3/include/std/format | 5 ++---
libstdc++-v3/include/std/spanstream | 8 +++++++
libstdc++-v3/include/std/syncstream | 5 +++--
libstdc++-v3/src/c++23/std.cc.in | 44 +++++++++++++++++++++++++++++++------
4 files changed, 50 insertions(+), 12 deletions(-)
diff --git a/libstdc++-v3/include/std/format b/libstdc++-v3/include/std/format
index 1b4082e07a44..9bf5e78573b5 100644
--- a/libstdc++-v3/include/std/format
+++ b/libstdc++-v3/include/std/format
@@ -1052,7 +1052,6 @@ namespace __format
__write_escape_seq(_Out __out, uint_least32_t __val,
basic_string_view<_CharT> __prefix)
{
- using _Str_view = basic_string_view<_CharT>;
constexpr size_t __max = 8;
char __buf[__max];
const string_view __narrow(
@@ -1067,10 +1066,10 @@ namespace __format
#ifdef _GLIBCXX_USE_WCHAR_T
else
{
- _CharT __wbuf[__max];
+ wchar_t __wbuf[__max];
const size_t __n = __narrow.size();
std::__to_wstring_numeric(__narrow.data(), __n, __wbuf);
- __out = __format::__write(__out, _Str_view(__wbuf, __n));
+ __out = __format::__write(__out, wstring_view(__wbuf, __n));
}
#endif
*__out = _Separators<_CharT>::_S_braces()[1];
diff --git a/libstdc++-v3/include/std/spanstream b/libstdc++-v3/include/std/spanstream
index fd2a446ddaa3..6f1f681ae793 100644
--- a/libstdc++-v3/include/std/spanstream
+++ b/libstdc++-v3/include/std/spanstream
@@ -225,7 +225,9 @@ template<typename _CharT, typename _Traits>
{ __x.swap(__y); }
using spanbuf = basic_spanbuf<char>;
+#ifdef _GLIBCXX_USE_WCHAR_T
using wspanbuf = basic_spanbuf<wchar_t>;
+#endif
template<typename _CharT, typename _Traits>
class basic_ispanstream
@@ -319,7 +321,9 @@ template<typename _CharT, typename _Traits>
{ __x.swap(__y); }
using ispanstream = basic_ispanstream<char>;
+#ifdef _GLIBCXX_USE_WCHAR_T
using wispanstream = basic_ispanstream<wchar_t>;
+#endif
template<typename _CharT, typename _Traits>
class basic_ospanstream
@@ -389,7 +393,9 @@ template<typename _CharT, typename _Traits>
{ __x.swap(__y); }
using ospanstream = basic_ospanstream<char>;
+#ifdef _GLIBCXX_USE_WCHAR_T
using wospanstream = basic_ospanstream<wchar_t>;
+#endif
template<typename _CharT, typename _Traits>
class basic_spanstream
@@ -459,7 +465,9 @@ template<typename _CharT, typename _Traits>
{ __x.swap(__y); }
using spanstream = basic_spanstream<char>;
+#ifdef _GLIBCXX_USE_WCHAR_T
using wspanstream = basic_spanstream<wchar_t>;
+#endif
_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
diff --git a/libstdc++-v3/include/std/syncstream b/libstdc++-v3/include/std/syncstream
index 9cecd513e9a5..7a1f956dca55 100644
--- a/libstdc++-v3/include/std/syncstream
+++ b/libstdc++-v3/include/std/syncstream
@@ -299,10 +299,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
{ __x.swap(__y); }
using syncbuf = basic_syncbuf<char>;
- using wsyncbuf = basic_syncbuf<wchar_t>;
-
using osyncstream = basic_osyncstream<char>;
+#ifdef _GLIBCXX_USE_WCHAR_T
+ using wsyncbuf = basic_syncbuf<wchar_t>;
using wosyncstream = basic_osyncstream<wchar_t>;
+#endif
_GLIBCXX_END_NAMESPACE_VERSION
} // namespace std
#endif // __cpp_lib_syncbuf
diff --git a/libstdc++-v3/src/c++23/std.cc.in b/libstdc++-v3/src/c++23/std.cc.in
index dbed0112dca5..5aab08f2c498 100644
--- a/libstdc++-v3/src/c++23/std.cc.in
+++ b/libstdc++-v3/src/c++23/std.cc.in
@@ -1368,17 +1368,19 @@ export namespace std
#endif
using std::formatter;
using std::make_format_args;
- using std::make_wformat_args;
#if __cpp_lib_format >= 202603L // >= C++26
using std::dynamic_format;
#endif
using std::vformat;
using std::vformat_to;
using std::visit_format_arg;
+#ifdef _GLIBCXX_USE_WCHAR_T
+ using std::make_wformat_args;
using std::wformat_args;
using std::wformat_context;
using std::wformat_parse_context;
using std::wformat_string;
+#endif
#ifdef __cpp_lib_format_ranges
using std::format_kind;
using std::range_format;
@@ -1416,10 +1418,12 @@ export namespace std
using std::ifstream;
using std::ofstream;
using std::swap;
+#ifdef _GLIBCXX_USE_WCHAR_T
using std::wfilebuf;
using std::wfstream;
using std::wifstream;
using std::wofstream;
+#endif
}
// <functional>
@@ -1620,7 +1624,9 @@ export namespace std
using std::streamsize;
using std::unitbuf;
using std::uppercase;
+#ifdef _GLIBCXX_USE_WCHAR_T
using std::wios;
+#endif
}
// <iosfwd>
@@ -1639,9 +1645,11 @@ export namespace std
using std::basic_syncbuf;
using std::osyncstream;
using std::syncbuf;
+#ifdef _GLIBCXX_USE_WCHAR_T
using std::wosyncstream;
using std::wsyncbuf;
#endif
+#endif
}
// <iostream>
@@ -1651,10 +1659,12 @@ export namespace std
using std::cin;
using std::clog;
using std::cout;
+#ifdef _GLIBCXX_USE_WCHAR_T
using std::wcerr;
using std::wcin;
using std::wclog;
using std::wcout;
+#endif
}
// <istream>
@@ -1664,8 +1674,10 @@ export namespace std
using std::basic_istream;
using std::iostream;
using std::istream;
+#ifdef _GLIBCXX_USE_WCHAR_T
using std::wiostream;
using std::wistream;
+#endif
using std::ws;
using std::operator>>;
}
@@ -2487,7 +2499,9 @@ export namespace std
using std::ends;
using std::flush;
using std::ostream;
+#ifdef _GLIBCXX_USE_WCHAR_T
using std::wostream;
+#endif
using std::operator<<;
#ifdef __cpp_lib_syncbuf
using std::emit_on_flush;
@@ -2916,9 +2930,11 @@ export namespace std
using std::ssub_match;
using std::sub_match;
using std::swap;
+#ifdef _GLIBCXX_USE_WCHAR_T
using std::wcsub_match;
using std::wregex;
using std::wssub_match;
+#endif
using std::operator==;
using std::operator<=>;
using std::operator<<;
@@ -2934,20 +2950,24 @@ export namespace std
using std::smatch;
using std::sregex_iterator;
using std::sregex_token_iterator;
+#ifdef _GLIBCXX_USE_WCHAR_T
using std::wcmatch;
using std::wcregex_iterator;
using std::wcregex_token_iterator;
using std::wsmatch;
using std::wsregex_iterator;
using std::wsregex_token_iterator;
+#endif
namespace pmr
{
#if _GLIBCXX_USE_CXX11_ABI
using std::pmr::cmatch;
using std::pmr::match_results;
using std::pmr::smatch;
+#ifdef _GLIBCXX_USE_WCHAR_T
using std::pmr::wcmatch;
using std::pmr::wsmatch;
+#endif
#endif
}
}
@@ -3020,17 +3040,19 @@ export namespace std
export namespace std
{
using std::basic_spanbuf;
- using std::spanbuf;
- using std::wspanbuf;
using std::basic_ispanstream;
- using std::ispanstream;
- using std::wispanstream;
using std::basic_ospanstream;
- using std::ospanstream;
- using std::wospanstream;
using std::basic_spanstream;
+ using std::spanbuf;
+ using std::ispanstream;
+ using std::ospanstream;
using std::spanstream;
+#ifdef _GLIBCXX_USE_WCHAR_T
+ using std::wspanbuf;
+ using std::wispanstream;
+ using std::wospanstream;
using std::wspanstream;
+#endif
}
#endif
@@ -3046,10 +3068,12 @@ export namespace std
using std::stringbuf;
using std::stringstream;
using std::swap;
+#ifdef _GLIBCXX_USE_WCHAR_T
using std::wistringstream;
using std::wostringstream;
using std::wstringbuf;
using std::wstringstream;
+#endif
}
// <stack>
@@ -3144,7 +3168,9 @@ export namespace std
{
using std::basic_streambuf;
using std::streambuf;
+#ifdef _GLIBCXX_USE_WCHAR_T
using std::wstreambuf;
+#endif
}
// <string>
@@ -3171,7 +3197,9 @@ export namespace std
using std::stoull;
using std::string;
using std::to_string;
+#ifdef _GLIBCXX_USE_WCHAR_T
using std::to_wstring;
+#endif
using std::u16string;
using std::u32string;
using std::u8string;
@@ -3236,9 +3264,11 @@ export namespace std
using std::basic_osyncstream;
using std::osyncstream;
using std::syncbuf;
+#ifdef _GLIBCXX_USE_WCHAR_T
using std::wosyncstream;
using std::wsyncbuf;
#endif
+#endif
}
// 19.5 <system_error>
More information about the Libstdc++-cvs
mailing list