gcc/libstdc++-v3/testsuite/20_util
Jonathan Wakely 3dbc7b809a libstdc++: Improve diagnostics for std::get with invalid tuple index
This adds a deleted overload of std::get<I>(const tuple<Types...>&).
Invalid calls with an out of range index will match the deleted overload
and give a single, clear error about calling a deleted function, instead
of overload resolution errors for every std::get overload in the
library.

This changes the current output of 15+ errors (plus notes and associated
header context) into just two errors (plus context):

error: static assertion failed: tuple index must be in range
error: use of deleted function 'constexpr std::__enable_if_t<(__i >= sizeof... (_Types))> std::get(const std::tuple<_Types ...>&) [with long unsigned int __i = 1; _Elements = {int}; std::__enable_if_t<(__i >= sizeof... (_Types))> = void]'

This seems like a nice improvement, although PR c++/66968 means that
"_Types" is printed in the signature rather than "_Elements".

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

libstdc++-v3/ChangeLog:

	* include/std/tuple (get<I>): Add deleted overload for bad
	index.
	* testsuite/20_util/tuple/element_access/get_neg.cc: Adjust
	expected errors.
2021-07-16 22:24:34 +01:00
..
add_const Update copyright years. 2021-01-04 10:26:59 +01:00
add_cv Update copyright years. 2021-01-04 10:26:59 +01:00
add_lvalue_reference Update copyright years. 2021-01-04 10:26:59 +01:00
add_pointer Update copyright years. 2021-01-04 10:26:59 +01:00
add_rvalue_reference Update copyright years. 2021-01-04 10:26:59 +01:00
add_volatile Update copyright years. 2021-01-04 10:26:59 +01:00
addressof libstdc++: Remove redundant -std=gnu++17 option from remaining tests 2021-05-10 16:22:54 +01:00
align Update copyright years. 2021-01-04 10:26:59 +01:00
aligned_storage Update copyright years. 2021-01-04 10:26:59 +01:00
aligned_union Update copyright years. 2021-01-04 10:26:59 +01:00
alignment_of Update copyright years. 2021-01-04 10:26:59 +01:00
allocator libstdc++: Add warnings for some C++23 deprecations 2021-06-09 10:32:43 +01:00
allocator_traits Update copyright years. 2021-01-04 10:26:59 +01:00
any libstdc++: Fix std::any constraints [PR101034] 2021-06-14 15:10:56 +01:00
as_const libstdc++: Remove redundant -std=gnu++17 option from remaining tests 2021-05-10 16:22:54 +01:00
assume_aligned Update copyright years. 2021-01-04 10:26:59 +01:00
auto_ptr Update copyright years. 2021-01-04 10:26:59 +01:00
bad_function_call Update copyright years. 2021-01-04 10:26:59 +01:00
bind libstdc++: Remove redundant -std=gnu++17 option from remaining tests 2021-05-10 16:22:54 +01:00
bool_constant libstdc++: Remove redundant -std=gnu++17 option from remaining tests 2021-05-10 16:22:54 +01:00
common_reference libstdc++: Fix common_reference for non-reference results [PR100894] 2021-06-14 21:17:53 +01:00
common_type/requirements Update copyright years. 2021-01-04 10:26:59 +01:00
conditional/requirements Update copyright years. 2021-01-04 10:26:59 +01:00
decay/requirements Update copyright years. 2021-01-04 10:26:59 +01:00
declval/requirements Update copyright years. 2021-01-04 10:26:59 +01:00
default_delete Update copyright years. 2021-01-04 10:26:59 +01:00
duration libstdc++: Remove redundant -std=gnu++17 option from remaining tests 2021-05-10 16:22:54 +01:00
duration_cast libstdc++: Remove redundant -std=gnu++17 option from remaining tests 2021-05-10 16:22:54 +01:00
enable_if/requirements Update copyright years. 2021-01-04 10:26:59 +01:00
enable_shared_from_this libstdc++: Remove redundant -std=gnu++17 option from remaining tests 2021-05-10 16:22:54 +01:00
exchange Update copyright years. 2021-01-04 10:26:59 +01:00
extent Update copyright years. 2021-01-04 10:26:59 +01:00
forward libstdc++: Clarify static_assert message 2021-04-06 16:43:24 +01:00
from_chars libstdc++: Remove redundant -std=gnu++17 option from remaining tests 2021-05-10 16:22:54 +01:00
function libstdc++: Remove redundant -std=gnu++17 option from remaining tests 2021-05-10 16:22:54 +01:00
function_objects libstdc++: Remove redundant -std=gnu++17 option from remaining tests 2021-05-10 16:22:54 +01:00
has_unique_object_representations libstdc++: Remove redundant -std=gnu++17 option from remaining tests 2021-05-10 16:22:54 +01:00
has_virtual_destructor Update copyright years. 2021-01-04 10:26:59 +01:00
hash libstdc++: Remove redundant -std=gnu++17 option from remaining tests 2021-05-10 16:22:54 +01:00
headers libstdc++: Fix tests that fail in C++98 mode 2021-05-11 17:21:08 +01:00
in_place libstdc++: Remove redundant -std=gnu++17 option from remaining tests 2021-05-10 16:22:54 +01:00
integer_comparisons Update copyright years. 2021-01-04 10:26:59 +01:00
integer_sequence Update copyright years. 2021-01-04 10:26:59 +01:00
integral_constant Update copyright years. 2021-01-04 10:26:59 +01:00
invoke_result Update copyright years. 2021-01-04 10:26:59 +01:00
is_abstract Update copyright years. 2021-01-04 10:26:59 +01:00
is_aggregate libstdc++: Remove redundant -std=gnu++17 option from remaining tests 2021-05-10 16:22:54 +01:00
is_arithmetic Update copyright years. 2021-01-04 10:26:59 +01:00
is_array Update copyright years. 2021-01-04 10:26:59 +01:00
is_assignable Update copyright years. 2021-01-04 10:26:59 +01:00
is_base_of Update copyright years. 2021-01-04 10:26:59 +01:00
is_bounded_array Update copyright years. 2021-01-04 10:26:59 +01:00
is_class Update copyright years. 2021-01-04 10:26:59 +01:00
is_complete_or_unbounded Update copyright years. 2021-01-04 10:26:59 +01:00
is_compound Update copyright years. 2021-01-04 10:26:59 +01:00
is_const Update copyright years. 2021-01-04 10:26:59 +01:00
is_constant_evaluated Update copyright years. 2021-01-04 10:26:59 +01:00
is_constructible Update copyright years. 2021-01-04 10:26:59 +01:00
is_convertible Update copyright years. 2021-01-04 10:26:59 +01:00
is_copy_assignable Update copyright years. 2021-01-04 10:26:59 +01:00
is_copy_constructible Update copyright years. 2021-01-04 10:26:59 +01:00
is_default_constructible Update copyright years. 2021-01-04 10:26:59 +01:00
is_destructible Update copyright years. 2021-01-04 10:26:59 +01:00
is_empty Update copyright years. 2021-01-04 10:26:59 +01:00
is_enum Update copyright years. 2021-01-04 10:26:59 +01:00
is_final Update copyright years. 2021-01-04 10:26:59 +01:00
is_floating_point Update copyright years. 2021-01-04 10:26:59 +01:00
is_function Update copyright years. 2021-01-04 10:26:59 +01:00
is_fundamental Update copyright years. 2021-01-04 10:26:59 +01:00
is_implicitly_default_constructible Update copyright years. 2021-01-04 10:26:59 +01:00
is_integral Update copyright years. 2021-01-04 10:26:59 +01:00
is_invocable libstdc++: Remove redundant -std=gnu++17 option from remaining tests 2021-05-10 16:22:54 +01:00
is_literal_type libstdc++: Remove redundant -std=gnu++17 option from remaining tests 2021-05-10 16:22:54 +01:00
is_lvalue_reference Update copyright years. 2021-01-04 10:26:59 +01:00
is_member_function_pointer Update copyright years. 2021-01-04 10:26:59 +01:00
is_member_object_pointer Update copyright years. 2021-01-04 10:26:59 +01:00
is_member_pointer Update copyright years. 2021-01-04 10:26:59 +01:00
is_move_assignable Update copyright years. 2021-01-04 10:26:59 +01:00
is_move_constructible Update copyright years. 2021-01-04 10:26:59 +01:00
is_nothrow_assignable Update copyright years. 2021-01-04 10:26:59 +01:00
is_nothrow_constructible libstdc++: Remove redundant -std=gnu++17 option from remaining tests 2021-05-10 16:22:54 +01:00
is_nothrow_convertible Update copyright years. 2021-01-04 10:26:59 +01:00
is_nothrow_copy_assignable Update copyright years. 2021-01-04 10:26:59 +01:00
is_nothrow_copy_constructible Update copyright years. 2021-01-04 10:26:59 +01:00
is_nothrow_default_constructible Update copyright years. 2021-01-04 10:26:59 +01:00
is_nothrow_destructible Update copyright years. 2021-01-04 10:26:59 +01:00
is_nothrow_invocable libstdc++: Remove redundant -std=gnu++17 option from remaining tests 2021-05-10 16:22:54 +01:00
is_nothrow_move_assignable Update copyright years. 2021-01-04 10:26:59 +01:00
is_nothrow_move_constructible Update copyright years. 2021-01-04 10:26:59 +01:00
is_nothrow_swappable libstdc++: Remove redundant -std=gnu++17 option from remaining tests 2021-05-10 16:22:54 +01:00
is_nothrow_swappable_with libstdc++: Remove redundant -std=gnu++17 option from remaining tests 2021-05-10 16:22:54 +01:00
is_null_pointer Update copyright years. 2021-01-04 10:26:59 +01:00
is_object Update copyright years. 2021-01-04 10:26:59 +01:00
is_pod Update copyright years. 2021-01-04 10:26:59 +01:00
is_pointer Update copyright years. 2021-01-04 10:26:59 +01:00
is_polymorphic Update copyright years. 2021-01-04 10:26:59 +01:00
is_reference Update copyright years. 2021-01-04 10:26:59 +01:00
is_rvalue_reference Update copyright years. 2021-01-04 10:26:59 +01:00
is_same Update copyright years. 2021-01-04 10:26:59 +01:00
is_scalar Update copyright years. 2021-01-04 10:26:59 +01:00
is_scoped_enum libstdc++: Make std::is_scoped_enum work with incomplete types 2021-04-08 11:56:59 +01:00
is_signed Update copyright years. 2021-01-04 10:26:59 +01:00
is_standard_layout Update copyright years. 2021-01-04 10:26:59 +01:00
is_swappable libstdc++: Remove redundant -std=gnu++17 option from remaining tests 2021-05-10 16:22:54 +01:00
is_swappable_with libstdc++: Remove redundant -std=gnu++17 option from remaining tests 2021-05-10 16:22:54 +01:00
is_trivial Update copyright years. 2021-01-04 10:26:59 +01:00
is_trivially_assignable Update copyright years. 2021-01-04 10:26:59 +01:00
is_trivially_constructible Update copyright years. 2021-01-04 10:26:59 +01:00
is_trivially_copy_assignable Update copyright years. 2021-01-04 10:26:59 +01:00
is_trivially_copy_constructible Update copyright years. 2021-01-04 10:26:59 +01:00
is_trivially_copyable Update copyright years. 2021-01-04 10:26:59 +01:00
is_trivially_default_constructible Update copyright years. 2021-01-04 10:26:59 +01:00
is_trivially_destructible Update copyright years. 2021-01-04 10:26:59 +01:00
is_trivially_move_assignable Update copyright years. 2021-01-04 10:26:59 +01:00
is_trivially_move_constructible Update copyright years. 2021-01-04 10:26:59 +01:00
is_unbounded_array Update copyright years. 2021-01-04 10:26:59 +01:00
is_union Update copyright years. 2021-01-04 10:26:59 +01:00
is_unsigned Update copyright years. 2021-01-04 10:26:59 +01:00
is_void Update copyright years. 2021-01-04 10:26:59 +01:00
is_volatile Update copyright years. 2021-01-04 10:26:59 +01:00
logical_traits libstdc++: Remove redundant -std=gnu++17 option from remaining tests 2021-05-10 16:22:54 +01:00
make_signed/requirements Update copyright years. 2021-01-04 10:26:59 +01:00
make_unsigned/requirements Update copyright years. 2021-01-04 10:26:59 +01:00
memory_resource libstdc++: Remove redundant -std=gnu++17 option from PMR tests 2021-05-10 16:22:53 +01:00
monotonic_buffer_resource libstdc++: Remove redundant -std=gnu++17 option from PMR tests 2021-05-10 16:22:53 +01:00
move Update copyright years. 2021-01-04 10:26:59 +01:00
move_if_noexcept Update copyright years. 2021-01-04 10:26:59 +01:00
nonesuch Update copyright years. 2021-01-04 10:26:59 +01:00
optional libstdc++: Implement LWG 2762 for std::unique_ptr::operator* 2021-06-24 14:04:02 +01:00
owner_less Update copyright years. 2021-01-04 10:26:59 +01:00
pair libstdc++: Remove redundant -std=gnu++17 option from remaining tests 2021-05-10 16:22:54 +01:00
pointer_safety libstdc++: Remove garbage collection support for C++23 [P2186R2] 2021-06-22 20:58:43 +01:00
pointer_traits Update copyright years. 2021-01-04 10:26:59 +01:00
polymorphic_allocator libstdc++: Remove redundant -std=gnu++17 option from PMR tests 2021-05-10 16:22:53 +01:00
rank Update copyright years. 2021-01-04 10:26:59 +01:00
ratio c++: Don't hide narrowing errors in system headers 2021-07-16 09:28:37 -04:00
raw_storage_iterator Update copyright years. 2021-01-04 10:26:59 +01:00
reference_wrapper libstdc++: Remove redundant -std=gnu++17 option from remaining tests 2021-05-10 16:22:54 +01:00
remove_all_extents Update copyright years. 2021-01-04 10:26:59 +01:00
remove_const Update copyright years. 2021-01-04 10:26:59 +01:00
remove_cv Update copyright years. 2021-01-04 10:26:59 +01:00
remove_cvref libstdc++: Fix definition of std::remove_cvref_t 2021-05-06 13:41:15 +01:00
remove_extent Update copyright years. 2021-01-04 10:26:59 +01:00
remove_pointer Update copyright years. 2021-01-04 10:26:59 +01:00
remove_reference Update copyright years. 2021-01-04 10:26:59 +01:00
remove_volatile Update copyright years. 2021-01-04 10:26:59 +01:00
result_of Update copyright years. 2021-01-04 10:26:59 +01:00
scoped_allocator libstdc++: Adjust expected errors in tests when compiled as C++20 2021-05-10 15:54:43 +01:00
shared_ptr libstdc++: Implement LWG 2762 for std::unique_ptr::operator* 2021-06-24 14:04:02 +01:00
specialized_algorithms libstdc++: Remove redundant -std=gnu++17 option from algorithm tests 2021-05-10 16:22:54 +01:00
steady_clock Update copyright years. 2021-01-04 10:26:59 +01:00
synchronized_pool_resource libstdc++: Remove redundant -std=gnu++17 option from PMR tests 2021-05-10 16:22:53 +01:00
system_clock Update copyright years. 2021-01-04 10:26:59 +01:00
time_point libstdc++: Remove redundant -std=gnu++17 option from remaining tests 2021-05-10 16:22:54 +01:00
time_point_cast libstdc++: Remove redundant -std=gnu++17 option from remaining tests 2021-05-10 16:22:54 +01:00
to_address Update copyright years. 2021-01-04 10:26:59 +01:00
to_chars libstdc++: Disable floating_to_chars.cc on 16 bit targets 2021-05-20 13:21:41 +01:00
to_underlying libstdc++: Add std::to_underlying for C++23 2021-02-25 11:53:58 +00:00
tuple libstdc++: Improve diagnostics for std::get with invalid tuple index 2021-07-16 22:24:34 +01:00
type_identity/requirements Update copyright years. 2021-01-04 10:26:59 +01:00
typeindex Update copyright years. 2021-01-04 10:26:59 +01:00
underlying_type/requirements Update copyright years. 2021-01-04 10:26:59 +01:00
unique_ptr libstdc++: Revert changes to std::unique_ptr<T[]>::operator[] [PR 101271] 2021-07-02 12:15:28 +01:00
unsynchronized_pool_resource libstdc++: Remove redundant -std=gnu++17 option from PMR tests 2021-05-10 16:22:53 +01:00
unwrap_reference Update copyright years. 2021-01-04 10:26:59 +01:00
uses_allocator libstdc++: Remove redundant -std=gnu++17 option from remaining tests 2021-05-10 16:22:54 +01:00
variant libstdc++: Remove redundant -std=gnu++17 option from any/optional/variant tests 2021-05-10 16:22:53 +01:00
void_t libstdc++: Remove redundant -std=gnu++17 option from remaining tests 2021-05-10 16:22:54 +01:00
weak_ptr libstdc++: Remove redundant -std=gnu++17 option from remaining tests 2021-05-10 16:22:54 +01:00
rel_ops.cc Update copyright years. 2021-01-04 10:26:59 +01:00
temporary_buffer.cc Update copyright years. 2021-01-04 10:26:59 +01:00
variable_templates_for_traits.cc libstdc++: Remove redundant -std=gnu++17 option from remaining tests 2021-05-10 16:22:54 +01:00