gcc/libstdc++-v3
Jonathan Wakely 30ab6d9e43 libstdc++: Optimize std::variant traits and improve diagnostics
By defining additional partial specializations of _Nth_type we can
reduce the number of recursive instantiations needed to get from N to 0.
We can also use _Nth_type in variant_alternative, to take advantage of
that new optimization.

By adding a static_assert to variant_alternative we get a nicer error
than 'invalid use of incomplete type'.

By defining partial specializations of std::variant_size_v for the
common case we can avoid instantiating the std::variant_size class
template.

The __tuple_count class template and __tuple_count_v variable template
can be simplified to a single variable template, __count.

By adding a deleted constructor to the _Variant_union primary template
we can (very slightly) improve diagnostics for invalid attempts to
construct a std::variant with an out-of-range index. Instead of a
confusing error about "too many initializers for ..." we get a call to a
deleted function.

By using _Nth_type instead of variant_alternative (for cv-unqualified
variant types) we avoid instantiating variant_alternative.

By adding deleted overloads of variant::emplace we get better
diagnostics for emplace<invalid-index> or emplace<invalid-type>. Instead
of getting errors explaining why each of the four overloads wasn't
valid, we just get one error about calling a deleted function.

libstdc++-v3/ChangeLog:

	* include/std/variant (_Nth_type): Define partial
	specializations to reduce number of instantiations.
	(variant_size_v): Define partial specializations to avoid
	instantiations.
	(variant_alternative): Use _Nth_type. Add static assert.
	(__tuple_count, __tuple_count_v): Replace with ...
	(__count): New variable template.
	(_Variant_union): Add deleted constructor.
	(variant::__to_type): Use _Nth_type.
	(variant::emplace): Use _Nth_type. Add deleted overloads for
	invalid types and indices.
2021-11-04 09:36:09 +00:00
..
config aix: Protect AIX math.h overloads with new macro. 2021-07-22 11:30:34 -04:00
doc libstdc++: Improve generated man pages for libstdc++ 2021-10-21 22:24:57 +01:00
include libstdc++: Optimize std::variant traits and improve diagnostics 2021-11-04 09:36:09 +00:00
libsupc++ libstdc++: Add wrapper for internal uses of std::terminate 2021-10-11 20:35:51 +01:00
po Update copyright years. 2021-01-04 10:26:59 +01:00
python libstdc++: Fix vector<bool> printer tests to work in debug mode 2021-08-18 14:26:38 +01:00
scripts libstdc++: Improve generated man pages for libstdc++ 2021-10-21 22:24:57 +01:00
src libstdc++: Implement std::random_device::entropy() for other sources 2021-10-19 17:27:06 +01:00
testsuite libstdc++: Fix handling of const types in std::variant [PR102912] 2021-11-04 09:36:09 +00:00
acinclude.m4 ctype support for libstdc++ on VxWorks 2021-05-04 21:49:43 -03:00
aclocal.m4
ChangeLog Daily bump. 2021-11-04 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++: Check for TLS support on mingw cross-compilers 2021-09-15 09:49:33 +01:00
configure.ac libstdc++: Fix broken autoconf check for O_NONBLOCK 2021-08-31 17:38:27 +01:00
configure.host Scope libstdc++ configuration for vxworks to all versions 2020-10-22 16:40:57 +00:00
crossconfig.m4 libstdc++: Check for TLS support on mingw cross-compilers 2021-09-15 09:49:33 +01:00
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.