gcc/libstdc++-v3/include/c_compatibility
Tom Honermann 0e4e4b37d9 libstdc++: Declare std::c8rtomb and std::mbrtoc8 if provided by the C library
This patch completes implementation of the C++20 proposal P0482R6 [1] by
adding declarations of std::c8rtomb() and std::mbrtoc8() in <cuchar> if
provided by the C library in <uchar.h>.

This patch addresses feedback provided in response to a previous patch
submission [2].

Autoconf changes determine if the C library declares c8rtomb and mbrtoc8
at global scope when uchar.h is included and compiled with either
-fchar8_t or -std=c++20. New _GLIBCXX_USE_UCHAR_C8RTOMB_MBRTOC8_FCHAR8_T
and _GLIBCXX_USE_UCHAR_C8RTOMB_MBRTOC8_CXX20 configuration macros
reflect the probe results. The <cuchar> header declares these functions
in the std namespace only if available and the _GLIBCXX_USE_CHAR8_T
configuration macro is defined (by default it is defined if the C++20
__cpp_char8_t feature test macro is defined)

Patches to glibc to implement c8rtomb and mbrtoc8 have been submitted [3].

New tests validate the presence of these declarations. The tests pass
trivially if the C library does not provide these functions. Otherwise
they ensure that the functions are declared when <cuchar> is included
and either -fchar8_t or -std=c++20 is enabled.

1]: WG21 P0482R6
      "char8_t: A type for UTF-8 characters and strings (Revision 6)"
      https://wg21.link/p0482r6

[2]: [PATCH] C++ P0482R6 char8_t: declare std::c8rtomb and std::mbrtoc8
if provided by the C library
      https://gcc.gnu.org/pipermail/libstdc++/2021-June/052685.html

[3]: "C++20 P0482R6 and C2X N2653"
      [Patch 0/3]:
https://sourceware.org/pipermail/libc-alpha/2022-January/135061.html
      [Patch 1/3]:
https://sourceware.org/pipermail/libc-alpha/2022-January/135062.html
      [Patch 2/3]:
https://sourceware.org/pipermail/libc-alpha/2022-January/135063.html
      [Patch 3/3]:
https://sourceware.org/pipermail/libc-alpha/2022-January/135064.html

libstdc++-v3/ChangeLog:

	* acinclude.m4: Define config macros if uchar.h provides
	c8rtomb() and mbrtoc8().
	* config.h.in: Regenerate.
	* configure: Regenerate.
	* include/c_compatibility/uchar.h (c8rtomb, mbrtoc8): Define.
	* include/c_global/cuchar (c8rtomb, mbrtoc8): Likewise.
	* include/c_std/cuchar (c8rtomb, mbrtoc8): Likewise.
	* testsuite/21_strings/headers/cuchar/functions_std_cxx20.cc:
	New test.
	* testsuite/21_strings/headers/cuchar/functions_std_fchar8_t.cc:
	New test.
2022-01-18 16:31:02 +00:00
..
assert.h Update copyright years. 2022-01-03 10:42:10 +01:00
complex.h Update copyright years. 2022-01-03 10:42:10 +01:00
ctype.h Update copyright years. 2022-01-03 10:42:10 +01:00
errno.h Update copyright years. 2022-01-03 10:42:10 +01:00
fenv.h Update copyright years. 2022-01-03 10:42:10 +01:00
float.h Update copyright years. 2022-01-03 10:42:10 +01:00
inttypes.h Update copyright years. 2022-01-03 10:42:10 +01:00
iso646.h Update copyright years. 2022-01-03 10:42:10 +01:00
limits.h Update copyright years. 2022-01-03 10:42:10 +01:00
locale.h Update copyright years. 2022-01-03 10:42:10 +01:00
math.h Update copyright years. 2022-01-03 10:42:10 +01:00
setjmp.h Update copyright years. 2022-01-03 10:42:10 +01:00
signal.h Update copyright years. 2022-01-03 10:42:10 +01:00
stdarg.h Update copyright years. 2022-01-03 10:42:10 +01:00
stdatomic.h libstdc++: Define <stdatomic.h> for C++23 2022-01-18 16:31:02 +00:00
stdbool.h Update copyright years. 2022-01-03 10:42:10 +01:00
stddef.h Update copyright years. 2022-01-03 10:42:10 +01:00
stdint.h Update copyright years. 2022-01-03 10:42:10 +01:00
stdio.h Update copyright years. 2022-01-03 10:42:10 +01:00
stdlib.h Update copyright years. 2022-01-03 10:42:10 +01:00
string.h Update copyright years. 2022-01-03 10:42:10 +01:00
tgmath.h Update copyright years. 2022-01-03 10:42:10 +01:00
time.h Update copyright years. 2022-01-03 10:42:10 +01:00
uchar.h libstdc++: Declare std::c8rtomb and std::mbrtoc8 if provided by the C library 2022-01-18 16:31:02 +00:00
wchar.h Update copyright years. 2022-01-03 10:42:10 +01:00
wctype.h Update copyright years. 2022-01-03 10:42:10 +01:00