[gcc r15-11383] libstdc++: Fix std module to work with --disable-wchar_t [PR126111]

Jonathan Wakely via Gcc-cvs <[email protected]>
Newsgroups gmane.comp.gcc.cvs
Message-ID <20260716103711.812B74BA5434__30314.0756137267$1784198237$gmane$org@sourceware.org>
https://gcc.gnu.org/g:7761e534ffd1d0194c180e5e3ad7630d38336d9a

commit r15-11383-g7761e534ffd1d0194c180e5e3ad7630d38336d9a
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]>
    
    (cherry picked from commit fb0c03ee7afca608cba0419629184b8f442085e2)

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 6c9f2743f6b4..68ad367bda5d 100644
--- a/libstdc++-v3/include/std/format
+++ b/libstdc++-v3/include/std/format
@@ -1011,7 +1011,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(
@@ -1026,10 +1025,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 23a340a746e8..7c2ef315e297 100644
--- a/libstdc++-v3/include/std/spanstream
+++ b/libstdc++-v3/include/std/spanstream
@@ -224,7 +224,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
@@ -318,7 +320,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
@@ -388,7 +392,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
@@ -458,7 +464,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 e2b5a199ec93..6dfb1367953d 100644
--- a/libstdc++-v3/include/std/syncstream
+++ b/libstdc++-v3/include/std/syncstream
@@ -309,10 +309,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 36e4361e2a3f..fe92986d79f5 100644
--- a/libstdc++-v3/src/c++23/std.cc.in
+++ b/libstdc++-v3/src/c++23/std.cc.in
@@ -1329,17 +1329,19 @@ export namespace std
 #endif
   using std::formatter;
   using std::make_format_args;
-  using std::make_wformat_args;
 #if __cpp_lib_format >= 202311L // >= C++26
   using std::runtime_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;
@@ -1374,10 +1376,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>
@@ -1564,7 +1568,9 @@ export namespace std
   using std::streamsize;
   using std::unitbuf;
   using std::uppercase;
+#ifdef _GLIBCXX_USE_WCHAR_T
   using std::wios;
+#endif
 }
 
 // <iosfwd>
@@ -1583,9 +1589,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>
@@ -1595,10 +1603,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>
@@ -1608,8 +1618,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>>;
 }
@@ -2116,7 +2128,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;
@@ -2537,9 +2551,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<<;
@@ -2555,20 +2571,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
   }
 }
@@ -2637,17 +2657,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
 
@@ -2663,10 +2685,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>
@@ -2761,7 +2785,9 @@ export namespace std
 {
   using std::basic_streambuf;
   using std::streambuf;
+#ifdef _GLIBCXX_USE_WCHAR_T
   using std::wstreambuf;
+#endif
 }
 
 // <string>
@@ -2788,7 +2814,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;
@@ -2853,9 +2881,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>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.