gcc/libstdc++-v3
Jonathan Wakely 0808b0df9c libstdc++: Optimize std::function move constructor [PR101923]
PR 101923 points out that the unconditional swap in the std::function
move constructor makes it slower than copying an empty std::function.
The copy constructor has to check for the empty case before doing
anything, and that makes it very fast for the empty case.

Adding the same check to the move constructor avoids copying the
_Any_data POD when we don't need to. We can also inline the effects of
swap, by copying each member and then zeroing the pointer members.

This makes moving an empty object at least as fast as copying an empty
object.

Signed-off-by: Jonathan Wakely <jwakely@redhat.com>

libstdc++-v3/ChangeLog:

	PR libstdc++/101923
	* include/bits/std_function.h (function(function&&)): Check for
	non-empty parameter before doing any work.
2021-08-17 14:22:50 +01:00
..
config aix: Protect AIX math.h overloads with new macro. 2021-07-22 11:30:34 -04:00
doc libstdc++: Deprecate std::random_shuffle for C++14 2021-08-03 15:30:35 +01:00
include libstdc++: Optimize std::function move constructor [PR101923] 2021-08-17 14:22:50 +01:00
libsupc++ libstdc++: Also move the [[nodiscard]] attributes in <compare> 2021-08-06 13:43:26 +01:00
po Update copyright years. 2021-01-04 10:26:59 +01:00
python libstdc++: Add pretty printer for std::error_code and std::error_condition 2021-08-17 14:22:49 +01:00
scripts libstdc++: Allow lualatex to be used for Doxygen PDF 2021-05-17 12:13:41 +01:00
src libstdc++: Use qualified-id for class member constant [PR101937] 2021-08-16 17:52:02 +01:00
testsuite libstdc++: Add conditional noexcept to std::exchange 2021-08-17 14:22:49 +01:00
acinclude.m4 ctype support for libstdc++ on VxWorks 2021-05-04 21:49:43 -03:00
aclocal.m4
ChangeLog Daily bump. 2021-08-17 00:16:32 +00:00
ChangeLog-1998
ChangeLog-1999
ChangeLog-2000
ChangeLog-2001
ChangeLog-2002
ChangeLog-2003
ChangeLog-2004
ChangeLog-2005
ChangeLog-2006
ChangeLog-2007
ChangeLog-2008
ChangeLog-2009
ChangeLog-2010
ChangeLog-2011
ChangeLog-2012
ChangeLog-2013
ChangeLog-2014
ChangeLog-2015
ChangeLog-2016
ChangeLog-2017
ChangeLog-2018
ChangeLog-2019
ChangeLog-2020 libstdc++: Fix typo in ChangeLog-2020 2021-01-13 11:02:13 +00:00
config.h.in libstdc++: Use secure_getenv for filesystem::temp_directory_path() [PR65018] 2021-07-30 18:12:39 +01:00
configure libstdc++: Use secure_getenv for filesystem::temp_directory_path() [PR65018] 2021-07-30 18:12:39 +01:00
configure.ac libstdc++: Use secure_getenv for filesystem::temp_directory_path() [PR65018] 2021-07-30 18:12:39 +01:00
configure.host
crossconfig.m4
fragment.am libstdc++: Add C++ runtime support for new 128-bit long double format 2020-12-16 23:25:01 +00:00
linkage.m4
Makefile.am Update copyright years. 2021-01-04 10:26:59 +01:00
Makefile.in libstdc++: Add C++ runtime support for new 128-bit long double format 2020-12-16 23:25:01 +00:00
README

file: libstdc++-v3/README

New users may wish to point their web browsers to the file
index.html in the 'doc/html' subdirectory.  It contains brief
building instructions and notes on how to configure the library in
interesting ways.