gcc/libstdc++-v3/testsuite/20_util/tuple
Jonathan Wakely ce9f305e44 Add __is_nothrow_convertible to fix std::is_nothrow_invocable_r
The definition of is_nothrow_invocable in terms of is_convertible and
is_nothrow_constructible is incorrect, because a type could have an
explicit constructor that means is_nothrow_constructible is true, but
implicit conversions could use a different constructor that is
potentially-throwing.

Fix it by adding a C++11 version of C++20's is_nothrow_convertible that
only considers implicit conversions.

	* include/std/type_traits (__is_nt_convertible_helper): Define it
	unconditionally, not only for C++20.
	(__is_nothrow_convertible): Define internal trait for use in C++11.
	(__is_nt_invocable_impl: Fix by using __is_nothrow_convertible.
	(is_invocable_r_v, is_nothrow_invocable_r_v): Add missing parameter.
	* testsuite/20_util/is_nothrow_convertible/value_ext.cc: New test.
	* testsuite/20_util/is_nothrow_convertible/value.cc: Check with type
	that has nothrow explicit conversion but potentially-throwing implicit
	conversion.
	* testsuite/20_util/is_nothrow_invocable/value.cc: Likewise.
	* testsuite/20_util/is_nothrow_invocable/value_ext.cc: Fix helper
	function to only consider implicit conversions.
	* testsuite/20_util/tuple/cons/noexcept_specs.cc: Add comment.

From-SVN: r271171
2019-05-14 15:39:58 +01:00
..
apply
comparison_operators
cons Add __is_nothrow_convertible to fix std::is_nothrow_invocable_r 2019-05-14 15:39:58 +01:00
creation_functions
element_access
make_from_tuple
requirements
48476.cc
51365.cc
53648.cc
56785.cc
60497.cc
61947.cc
67844.cc
77395.cc
77802.cc
78939.cc
cv_tuple_element.cc
cv_tuple_size_neg.cc
cv_tuple_size.cc
dr2729.cc
moveable2.cc
moveable.cc
noexcept_move_assign.cc
noexcept_swap.cc
swap_cxx17.cc
swap.cc
tuple_element_t.cc
tuple_element.cc
tuple_size_v.cc
tuple_size.cc