]> git.ipfire.org Git - thirdparty/gcc.git/commit
libstdc++: Implement C++26 native handles for file streams (P1759R6)
authorJonathan Wakely <jwakely@redhat.com>
Fri, 15 Sep 2023 12:43:43 +0000 (13:43 +0100)
committerJonathan Wakely <jwakely@redhat.com>
Fri, 15 Sep 2023 20:57:41 +0000 (21:57 +0100)
commitc4baeaecbbf7d0626d44ac0b69b3c8456dddb01a
tree1b921a92b810e0e0ddf455ab9456d9726347db3d
parenta923c52920d2f5c6cbd486f465dc4aec2d1f9544
libstdc++: Implement C++26 native handles for file streams (P1759R6)

The new __basic_file::native_handle() function can be added for C++11
and above, because the names "native_handle" and "native_handle_type"
are already reserved since C++11. Exporting those symbols from the
shared library does no harm, even if the feature gets dropped before the
C++23 standard is final.

The new member functions of std::fstream etc. are only declared for
C++26 and so are not instantiated in src/c++11/fstream-inst.cc. Declare
them with the always_inline attribute so that no symbol definitions are
needed in the library (we can change this later when C++26 support is
less experimental).

libstdc++-v3/ChangeLog:

* acinclude.m4 (GLIBCXX_CHECK_FILEBUF_NATIVE_HANDLES): New
macro.
* config.h.in: Regenerate.
* config/abi/pre/gnu.ver (GLIBCXX_3.4.32): Export new
basic_filebuf members.
* config/io/basic_file_stdio.cc (__basic_file::native_handle):
Define new function.
* config/io/basic_file_stdio.h (__basic_file::native_handle):
Declare new function.
* configure: Regenerate.
* configure.ac: Use GLIBCXX_CHECK_FILEBUF_NATIVE_HANDLES.
* include/bits/version.def (fstream_native_handles): New macro.
* include/bits/version.h: Regenerate.
* include/std/fstream (basic_filebuf::native_handle)
(basic_fstream::native_handle, basic_ifstream::native_handle)
(basic_ofstream::native_handle): New functions.
* src/c++11/Makefile.am: Move compilation of basic_file.cc,
locale_init.cc and localename.cc to here.
* src/c++11/Makefile.in: Regenerate.
* src/c++98/locale_init.cc: Moved to...
* src/c++11/locale_init.cc: ...here.
* src/c++98/localename.cc: Moved to...
* src/c++11/localename.cc: ...here.
* src/c++98/Makefile.am: Remove basic_file.cc, locale_init.cc
and localename.cc from here.
* src/c++98/Makefile.in: Regenerate.
* testsuite/27_io/basic_filebuf/native_handle/version.cc: New test.
* testsuite/27_io/basic_fstream/native_handle/char/1.cc: New test.
* testsuite/27_io/basic_fstream/native_handle/wchar_t/1.cc: New test.
* testsuite/27_io/basic_ifstream/native_handle/char/1.cc: New test.
* testsuite/27_io/basic_ifstream/native_handle/wchar_t/1.cc: New test.
* testsuite/27_io/basic_ofstream/native_handle/char/1.cc: New test.
* testsuite/27_io/basic_ofstream/native_handle/wchar_t/1.cc: New test.
23 files changed:
libstdc++-v3/acinclude.m4
libstdc++-v3/config.h.in
libstdc++-v3/config/abi/pre/gnu.ver
libstdc++-v3/config/io/basic_file_stdio.cc
libstdc++-v3/config/io/basic_file_stdio.h
libstdc++-v3/configure
libstdc++-v3/configure.ac
libstdc++-v3/include/bits/version.def
libstdc++-v3/include/bits/version.h
libstdc++-v3/include/std/fstream
libstdc++-v3/src/c++11/Makefile.am
libstdc++-v3/src/c++11/Makefile.in
libstdc++-v3/src/c++11/locale_init.cc [moved from libstdc++-v3/src/c++98/locale_init.cc with 100% similarity]
libstdc++-v3/src/c++11/localename.cc [moved from libstdc++-v3/src/c++98/localename.cc with 100% similarity]
libstdc++-v3/src/c++98/Makefile.am
libstdc++-v3/src/c++98/Makefile.in
libstdc++-v3/testsuite/27_io/basic_filebuf/native_handle/version.cc [new file with mode: 0644]
libstdc++-v3/testsuite/27_io/basic_fstream/native_handle/char/1.cc [new file with mode: 0644]
libstdc++-v3/testsuite/27_io/basic_fstream/native_handle/wchar_t/1.cc [new file with mode: 0644]
libstdc++-v3/testsuite/27_io/basic_ifstream/native_handle/char/1.cc [new file with mode: 0644]
libstdc++-v3/testsuite/27_io/basic_ifstream/native_handle/wchar_t/1.cc [new file with mode: 0644]
libstdc++-v3/testsuite/27_io/basic_ofstream/native_handle/char/1.cc [new file with mode: 0644]
libstdc++-v3/testsuite/27_io/basic_ofstream/native_handle/wchar_t/1.cc [new file with mode: 0644]