gcc/libstdc++-v3/include/bits
Jonathan Wakely 7ac205673c PR libstdc++/85965 delay static assertions until types are complete
The static assertions added for PR libstdc++/48101 were at class scope
and so were evaluated too eagerly, when it might not be possible to
determine whether the function objects are invocable with the key types.
The problematic cases are where the key type is not known to be
convertible to the argument type(s) of the function object until later,
after a type has been completed. Specifically, if the key type is a
pointer to a derived class and the function object's argument type is a
pointer to a base class, then the derived-to-base conversion is only
valid once the derived type is complete.

By moving the static assertions to the destructor they will only be
evaluated when the destructor is instantiated, at which point whether
the key type can be passed to the function object should be knowable.
The ideal place to do the checks would be only when the function objects
are actually invoked, but that would mean adding the checks in numerous
places, so the destructor is used instead.

The tests need to be adjusted because the "required from here" line is
now the location of the destructor, not the point of instantiation in
the test file. For the map and multimap tests which check two
specializations, the dg-error matching the assertion text matches both
cases. Also check the diagnostic output for the template arguments, to
ensure both specializations trigger the assertion.

	PR libstdc++/85965
	* include/bits/hashtable.h (_Hashtable): Move static assertions to
	destructor so they are not evaluated until the _Key type is complete.
	* include/bits/stl_tree.h (_Rb_tree): Likewise.
	* testsuite/23_containers/set/85965.cc: New test.
	* testsuite/23_containers/unordered_set/85965.cc: New test.
	* testsuite/23_containers/map/48101_neg.cc: Replace "here" errors
	with regexp matching the corresponding _Rb_tree specialization.
	* testsuite/23_containers/multimap/48101_neg.cc: Likewise.
	* testsuite/23_containers/multiset/48101_neg.cc: Remove "here" error.
	* testsuite/23_containers/set/48101_neg.cc: Likewise.
	* testsuite/23_containers/unordered_map/48101_neg.cc: Likewise.
	* testsuite/23_containers/unordered_multimap/48101_neg.cc: Likewise.
	* testsuite/23_containers/unordered_multiset/48101_neg.cc: Likewise.
	* testsuite/23_containers/unordered_set/48101_neg.cc: Likewise.

From-SVN: r269949
2019-03-26 15:28:48 +00:00
..
algorithmfwd.h Update copyright years. 2019-01-01 13:31:55 +01:00
alloc_traits.h PR libstdc++/89477 constrain deduction guides for maps and sets 2019-02-26 23:12:44 +00:00
allocated_ptr.h Update copyright years. 2019-01-01 13:31:55 +01:00
allocator.h Update copyright years. 2019-01-01 13:31:55 +01:00
atomic_base.h re PR libstdc++/89641 (std::atomic<T> no longer works) 2019-03-11 12:49:13 +01:00
atomic_futex.h Update copyright years. 2019-01-01 13:31:55 +01:00
basic_ios.h Update copyright years. 2019-01-01 13:31:55 +01:00
basic_ios.tcc Update copyright years. 2019-01-01 13:31:55 +01:00
basic_string.h P0482R5 char8_t: Standard library support 2019-02-19 02:54:42 +00:00
basic_string.tcc Export explicit instantiations for C++17 members of std::string 2019-01-04 23:23:22 +00:00
boost_concept_check.h Update copyright years. 2019-01-01 13:31:55 +01:00
c++0x_warning.h Update copyright years. 2019-01-01 13:31:55 +01:00
c++config Integrate C++17 parallel algorithms 2019-03-21 23:48:49 +00:00
char_traits.h PR libstdc++/89446 fix null pointer dereference in char_traits 2019-02-23 03:01:59 +00:00
codecvt.h P0482R5 char8_t: Standard library support 2019-02-19 02:54:42 +00:00
concept_check.h Update copyright years. 2019-01-01 13:31:55 +01:00
cpp_type_traits.h P0482R5 char8_t: Standard library support 2019-02-19 02:54:42 +00:00
deque.tcc Update copyright years. 2019-01-01 13:31:55 +01:00
enable_special_members.h Update copyright years. 2019-01-01 13:31:55 +01:00
erase_if.h Fix more missing or incorrect feature test macros 2019-01-15 12:58:19 +00:00
forward_list.h Fix after P0600. 2019-01-21 11:47:30 +00:00
forward_list.tcc Update copyright years. 2019-01-01 13:31:55 +01:00
fs_dir.h Update copyright years. 2019-01-01 13:31:55 +01:00
fs_fwd.h Define new filesystem::__file_clock type 2019-01-05 20:03:22 +00:00
fs_ops.h Update copyright years. 2019-01-01 13:31:55 +01:00
fs_path.h Add fixed underlying type to enum path::format 2019-03-08 13:56:48 +00:00
fstream.tcc Update copyright years. 2019-01-01 13:31:55 +01:00
functexcept.h Update copyright years. 2019-01-01 13:31:55 +01:00
functional_hash.h P0482R5 char8_t: Standard library support 2019-02-19 02:54:42 +00:00
gslice.h Update copyright years. 2019-01-01 13:31:55 +01:00
gslice_array.h Update copyright years. 2019-01-01 13:31:55 +01:00
hashtable.h PR libstdc++/85965 delay static assertions until types are complete 2019-03-26 15:28:48 +00:00
hashtable_policy.h Update copyright years. 2019-01-01 13:31:55 +01:00
indirect_array.h Update copyright years. 2019-01-01 13:31:55 +01:00
invoke.h Update copyright years. 2019-01-01 13:31:55 +01:00
ios_base.h Update copyright years. 2019-01-01 13:31:55 +01:00
istream.tcc Update copyright years. 2019-01-01 13:31:55 +01:00
list.tcc Update copyright years. 2019-01-01 13:31:55 +01:00
locale_classes.h Update copyright years. 2019-01-01 13:31:55 +01:00
locale_classes.tcc Update copyright years. 2019-01-01 13:31:55 +01:00
locale_conv.h P0482R5 char8_t: Standard library support 2019-02-19 02:54:42 +00:00
locale_facets.h P0482R5 char8_t: Standard library support 2019-02-19 02:54:42 +00:00
locale_facets.tcc PR libstdc++/68737 Do not use vsnprintf on HPUX 2019-01-28 23:58:57 +00:00
locale_facets_nonio.h Update copyright years. 2019-01-01 13:31:55 +01:00
locale_facets_nonio.tcc Update copyright years. 2019-01-01 13:31:55 +01:00
localefwd.h P0482R5 char8_t: Standard library support 2019-02-19 02:54:42 +00:00
mask_array.h Update copyright years. 2019-01-01 13:31:55 +01:00
memoryfwd.h Update copyright years. 2019-01-01 13:31:55 +01:00
move.h Update copyright years. 2019-01-01 13:31:55 +01:00
node_handle.h Update copyright years. 2019-01-01 13:31:55 +01:00
ostream.tcc Update copyright years. 2019-01-01 13:31:55 +01:00
ostream_insert.h Update copyright years. 2019-01-01 13:31:55 +01:00
parse_numbers.h Update copyright years. 2019-01-01 13:31:55 +01:00
postypes.h P0482R5 char8_t: Standard library support 2019-02-19 02:54:42 +00:00
predefined_ops.h Update copyright years. 2019-01-01 13:31:55 +01:00
ptr_traits.h Constexpr in std::pointer_traits (P1006R1) 2019-03-06 11:32:42 +00:00
quoted_string.h Update copyright years. 2019-01-01 13:31:55 +01:00
random.h Update copyright years. 2019-01-01 13:31:55 +01:00
random.tcc Update copyright years. 2019-01-01 13:31:55 +01:00
range_access.h Update copyright years. 2019-01-01 13:31:55 +01:00
refwrap.h P0357R3 reference_wrapper for incomplete types 2019-01-11 23:41:11 +00:00
regex.h Fix after P0600. 2019-01-21 11:47:30 +00:00
regex.tcc Update copyright years. 2019-01-01 13:31:55 +01:00
regex_automaton.h Update copyright years. 2019-01-01 13:31:55 +01:00
regex_automaton.tcc Update copyright years. 2019-01-01 13:31:55 +01:00
regex_compiler.h Update copyright years. 2019-01-01 13:31:55 +01:00
regex_compiler.tcc Update copyright years. 2019-01-01 13:31:55 +01:00
regex_constants.h Update copyright years. 2019-01-01 13:31:55 +01:00
regex_error.h Update copyright years. 2019-01-01 13:31:55 +01:00
regex_executor.h Update copyright years. 2019-01-01 13:31:55 +01:00
regex_executor.tcc Update copyright years. 2019-01-01 13:31:55 +01:00
regex_scanner.h Update copyright years. 2019-01-01 13:31:55 +01:00
regex_scanner.tcc Update copyright years. 2019-01-01 13:31:55 +01:00
shared_ptr.h PR libstdc++/88782 avoid ODR problems in std::make_shared 2019-01-18 21:28:48 +00:00
shared_ptr_atomic.h Update copyright years. 2019-01-01 13:31:55 +01:00
shared_ptr_base.h PR libstdc++/88782 avoid ODR problems in std::make_shared 2019-01-18 21:28:48 +00:00
slice_array.h Update copyright years. 2019-01-01 13:31:55 +01:00
specfun.h Update copyright years. 2019-01-01 13:31:55 +01:00
sstream.tcc Update copyright years. 2019-01-01 13:31:55 +01:00
std_abs.h Document LWG 2735 status and add test 2019-02-14 09:07:09 +00:00
std_function.h Update copyright years. 2019-01-01 13:31:55 +01:00
std_mutex.h Update copyright years. 2019-01-01 13:31:55 +01:00
stl_algo.h Update copyright years. 2019-01-01 13:31:55 +01:00
stl_algobase.h Avoid -Wconversion warnings when -Wsystem-headers is used 2019-03-22 16:45:48 +00:00
stl_bvector.h Update copyright years. 2019-01-01 13:31:55 +01:00
stl_construct.h Update copyright years. 2019-01-01 13:31:55 +01:00
stl_deque.h Rename __is_trivially_relocatable to __is_bitwise_relocatable. 2019-02-05 09:33:36 +00:00
stl_function.h re PR tree-optimization/88775 (Optimize std::string assignment) 2019-01-10 11:56:56 +01:00
stl_heap.h Update copyright years. 2019-01-01 13:31:55 +01:00
stl_iterator.h Update copyright years. 2019-01-01 13:31:55 +01:00
stl_iterator_base_funcs.h Update copyright years. 2019-01-01 13:31:55 +01:00
stl_iterator_base_types.h Update copyright years. 2019-01-01 13:31:55 +01:00
stl_list.h Fix after P0600. 2019-01-21 11:47:30 +00:00
stl_map.h PR libstdc++/89477 constrain deduction guides for maps and sets 2019-02-26 23:12:44 +00:00
stl_multimap.h PR libstdc++/89477 constrain deduction guides for maps and sets 2019-02-26 23:12:44 +00:00
stl_multiset.h PR libstdc++/89477 constrain deduction guides for maps and sets 2019-02-26 23:12:44 +00:00
stl_numeric.h Update copyright years. 2019-01-01 13:31:55 +01:00
stl_pair.h Update copyright years. 2019-01-01 13:31:55 +01:00
stl_queue.h PR libstdc++/89477 constrain deduction guides for maps and sets 2019-02-26 23:12:44 +00:00
stl_raw_storage_iter.h Update copyright years. 2019-01-01 13:31:55 +01:00
stl_relops.h Update copyright years. 2019-01-01 13:31:55 +01:00
stl_set.h PR libstdc++/89477 constrain deduction guides for maps and sets 2019-02-26 23:12:44 +00:00
stl_stack.h PR libstdc++/89477 constrain deduction guides for maps and sets 2019-02-26 23:12:44 +00:00
stl_tempbuf.h Update copyright years. 2019-01-01 13:31:55 +01:00
stl_tree.h PR libstdc++/85965 delay static assertions until types are complete 2019-03-26 15:28:48 +00:00
stl_uninitialized.h PR libstdc++/89090 avoid C++17 features in C++11/C++14 code 2019-02-05 14:44:56 +00:00
stl_vector.h PR libstdc++/89130 restore support for non-MoveConstructible types 2019-02-05 14:45:00 +00:00
stream_iterator.h Update copyright years. 2019-01-01 13:31:55 +01:00
streambuf.tcc Update copyright years. 2019-01-01 13:31:55 +01:00
streambuf_iterator.h Update copyright years. 2019-01-01 13:31:55 +01:00
string_view.tcc Update copyright years. 2019-01-01 13:31:55 +01:00
stringfwd.h P0482R5 char8_t: Standard library support 2019-02-19 02:54:42 +00:00
uniform_int_dist.h Update copyright years. 2019-01-01 13:31:55 +01:00
unique_lock.h Update copyright years. 2019-01-01 13:31:55 +01:00
unique_ptr.h PR libstdc++/88738 treat shared_ptr and unique_ptr more like plain old pointers 2019-01-16 08:01:22 +00:00
unordered_map.h PR libstdc++/89477 constrain deduction guides for maps and sets 2019-02-26 23:12:44 +00:00
unordered_set.h PR libstdc++/89477 constrain deduction guides for maps and sets 2019-02-26 23:12:44 +00:00
uses_allocator.h DR 2586 fix value category in uses-allocator checks 2019-02-14 15:08:33 +00:00
valarray_after.h Update copyright years. 2019-01-01 13:31:55 +01:00
valarray_array.h Update copyright years. 2019-01-01 13:31:55 +01:00
valarray_array.tcc Update copyright years. 2019-01-01 13:31:55 +01:00
valarray_before.h Update copyright years. 2019-01-01 13:31:55 +01:00
vector.tcc PR libstdc++/89130 restore support for non-MoveConstructible types 2019-02-05 14:45:00 +00:00