https://gcc.gnu.org/g:fb0c03ee7afca608cba0419629184b8f442085e2
commit r17-2409-gfb0c03ee7afca608cba0419629184b8f442085e2 Author: Jonathan Wakely <[email protected]> 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 <[email protected]> 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>
