mirror of
https://github.com/gcc-mirror/gcc.git
synced 2026-05-06 14:59:39 +02:00
afa58609ba075d28cea6e25f68743e56f9aa61a1
This patch changes the type of _M_handle member of __format::_Arg_value from __format::_HandleBase union member to basic_format_arg<_Context>::handle. This allows handle to be stored (using placement new) inside _Arg_value at compile time, as type _M_handle member now matches stored object. In addition to above, to make handle usable at compile time, we adjust the _M_func signature to match the stored function, avoiding the need for reinterpret cast. To avoid a cycling dependency, where basic_format_arg<_Context> requires instantiating _Arg_value<_Context> for its _M_val member, that in turn requires basic_format_arg<_Context>::handle, we define handle as nested class inside _Arg_value and change basic_format_arg<_Context>::handle to alias for it. Finally, the handle(_Tp&) constructor is now constrained to not accept handle itself, as otherwise it would be used instead of copy-constructor when constructing from handle&. As _Arg_value is already templated on _Context, this change should not lead to additional template instantiations. libstdc++-v3/ChangeLog: * include/std/format (__Arg_value::handle): Define, extracted with modification from basic_format_arg::handle. (_Arg_value::_Handle_base): Remove. (_Arg_value::_M_handle): Change type to handle. (_Arg_value::_M_get, _Arg_value::_M_set): Check for handle type directly, and return result unmodified. (basic_format_arg::__formattable): Remove. (basic_format_arg::handle): Replace with alias to _Arg_value::handle. Reviewed-by: Jonathan Wakely <jwakely@redhat.com> Signed-off-by: Tomasz Kamiński <tkaminsk@redhat.com>
…
…
…
…
…
…
…
…
…
…
…
…
…
This directory contains the GNU Compiler Collection (GCC). The GNU Compiler Collection is free software. See the files whose names start with COPYING for copying permission. The manuals, and some of the runtime libraries, are under different terms; see the individual source files for details. The directory INSTALL contains copies of the installation information as HTML and plain text. The source of this information is gcc/doc/install.texi. The installation information includes details of what is included in the GCC sources and what files GCC installs. See the file gcc/doc/gcc.texi (together with other files that it includes) for usage and porting information. An online readable version of the manual is in the files gcc/doc/gcc.info*. See http://gcc.gnu.org/bugs/ for how to report bugs usefully. Copyright years on GCC source files may be listed using range notation, e.g., 1987-2012, indicating that every year in the range, inclusive, is a copyrightable year that could otherwise be listed individually.
Description
Languages
C++
30.7%
C
30.2%
Ada
14.4%
D
6.1%
Go
5.7%
Other
12.4%