gcc/libstdc++-v3/include/bits
Patrick Palka 3bf5e7657b libstdc++: Fix common_iterator::operator-> [PR95322]
This patch fixes the definition of common_iterator::operator-> when the
underlying iterator's operator* returns a non-reference.

The first problem is that the class __detail::_Common_iter_proxy is used
unqualified.  Fixing that revealed another problem: the class's template
friend declaration of common_iterator doesn't match up with the
definition of common_iterator, because the friend declaration isn't
constrained.

If we try to make the friend declaration match up by adding constraints,
we run into frontend bug PR93467.  So we currently can't correctly
express this friend relation between __detail::_Common_iter_proxy and
common_iterator.

As a workaround to this frontend bug, this patch moves the definition of
_Common_iter_proxy into the class template of common_iterator so that we
could instead express the friend relation via the injected-class-name.

(This bug was found when attempting to use views::common to work around
the compile failure with the testcase in PR95322.)

libstdc++-v3/ChangeLog:

	PR libstdc++/95322
	* include/bits/stl_iterator.h (__detail::_Common_iter_proxy):
	Remove and instead define it ...
	(common_iterator::_Proxy): ... here.
	(common_iterator::operator->): Use it.
	* testsuite/24_iterators/common_iterator/2.cc: New test.
	* testsuite/std/ranges/adaptors/95322.cc: New test.
2020-05-26 16:17:34 -04:00
..
algorithmfwd.h Update copyright years. 2020-01-01 12:51:42 +01:00
alloc_traits.h libstdc++: Avoid errors in allocator's noexcept-specifier (PR 89510) 2020-04-30 16:01:43 +01:00
allocated_ptr.h Update copyright years. 2020-01-01 12:51:42 +01:00
allocator.h libstdc++: Avoid errors in allocator's noexcept-specifier (PR 89510) 2020-04-30 16:01:43 +01:00
atomic_base.h Implent C++20 std::atomic_flag::test 2020-05-12 07:37:09 +02:00
atomic_futex.h Update copyright years. 2020-01-01 12:51:42 +01:00
basic_ios.h Update copyright years. 2020-01-01 12:51:42 +01:00
basic_ios.tcc Update copyright years. 2020-01-01 12:51:42 +01:00
basic_string.h libstdc++: Add comparison operators for string and regex types 2020-04-17 16:40:11 +01:00
basic_string.tcc libstdc++: Fix outdated comment about std::string instantiations (PR 94854) 2020-04-29 19:00:58 +01:00
boost_concept_check.h libstdc++: Make _GLIBCXX_CONCEPT_CHECKS more constexpr-friendly 2020-02-27 10:52:28 +00:00
c++0x_warning.h Update copyright years. 2020-01-01 12:51:42 +01:00
c++config libstdc++: Fix freestanding build PR 92376) 2020-01-17 17:03:46 +00:00
char_traits.h libstdc++: Add comparison operators for string and regex types 2020-04-17 16:40:11 +01:00
charconv.h Update copyright years. 2020-01-01 12:51:42 +01:00
codecvt.h Update copyright years. 2020-01-01 12:51:42 +01:00
concept_check.h Update copyright years. 2020-01-01 12:51:42 +01:00
cpp_type_traits.h libstdc++: Fix comment on __memcpyable 2020-03-04 15:35:20 +00:00
deque.tcc Update copyright years. 2020-01-01 12:51:42 +01:00
enable_special_members.h Update copyright years. 2020-01-01 12:51:42 +01:00
erase_if.h libstdc++: Update __cpp_lib_erase_if macro (P1115R3) 2020-02-15 10:25:23 +00:00
forward_list.h libstdc++: Add comparison operators to sequence containers 2020-04-17 23:41:04 +01:00
forward_list.tcc Update copyright years. 2020-01-01 12:51:42 +01:00
fs_dir.h libstdc++: Add comparison operators to std::filesystem types 2020-04-15 21:01:42 +01:00
fs_fwd.h libstdc++: Add comparison operators to std::filesystem types 2020-04-15 21:01:42 +01:00
fs_ops.h Update copyright years. 2020-01-01 12:51:42 +01:00
fs_path.h libstdc++: Refactor filesystem::path string conversions 2020-05-23 09:40:16 +01:00
fstream.tcc Update copyright years. 2020-01-01 12:51:42 +01:00
functexcept.h Update copyright years. 2020-01-01 12:51:42 +01:00
functional_hash.h Update copyright years. 2020-01-01 12:51:42 +01:00
gslice_array.h Update copyright years. 2020-01-01 12:51:42 +01:00
gslice.h Update copyright years. 2020-01-01 12:51:42 +01:00
hashtable_policy.h libstdc++ Hastable: Move std::is_permutation to limit includes 2020-02-29 18:40:39 +01:00
hashtable.h libstdc++: Add missing std:: qualification of a forward call 2020-02-12 22:09:41 +01:00
indirect_array.h Update copyright years. 2020-01-01 12:51:42 +01:00
int_limits.h libstdc++: Add lightweight replacement for std::numeric_limits (PR 92546) 2020-02-17 15:11:04 +00:00
invoke.h Update copyright years. 2020-01-01 12:51:42 +01:00
ios_base.h Update copyright years. 2020-01-01 12:51:42 +01:00
istream.tcc Update copyright years. 2020-01-01 12:51:42 +01:00
iterator_concepts.h libstdc++: Avoid constraint recursion with iterator_traits (PR 93983) 2020-05-21 07:32:15 +01:00
list.tcc Update copyright years. 2020-01-01 12:51:42 +01:00
locale_classes.h libstdc++: Add comparison operators to types from Utilities clause 2020-04-15 19:47:48 +01:00
locale_classes.tcc Update copyright years. 2020-01-01 12:51:42 +01:00
locale_conv.h Update copyright years. 2020-01-01 12:51:42 +01:00
locale_facets_nonio.h Update copyright years. 2020-01-01 12:51:42 +01:00
locale_facets_nonio.tcc Update copyright years. 2020-01-01 12:51:42 +01:00
locale_facets.h Update copyright years. 2020-01-01 12:51:42 +01:00
locale_facets.tcc Update copyright years. 2020-01-01 12:51:42 +01:00
localefwd.h Update copyright years. 2020-01-01 12:51:42 +01:00
mask_array.h Update copyright years. 2020-01-01 12:51:42 +01:00
memoryfwd.h Update copyright years. 2020-01-01 12:51:42 +01:00
move.h Update copyright years. 2020-01-01 12:51:42 +01:00
node_handle.h Update copyright years. 2020-01-01 12:51:42 +01:00
ostream_insert.h Update copyright years. 2020-01-01 12:51:42 +01:00
ostream.tcc Update copyright years. 2020-01-01 12:51:42 +01:00
parse_numbers.h libstdc++: Add lightweight replacement for std::numeric_limits (PR 92546) 2020-02-17 15:11:04 +00:00
postypes.h Update copyright years. 2020-01-01 12:51:42 +01:00
predefined_ops.h Update copyright years. 2020-01-01 12:51:42 +01:00
ptr_traits.h libstdc++: Add missing feature test macros 2020-04-22 22:54:34 +01:00
quoted_string.h Update copyright years. 2020-01-01 12:51:42 +01:00
random.h libstdc++: Reduce header dependencies for C++20 (PR 92546) 2020-02-17 15:43:43 +00:00
random.tcc libstdc++: Fix undefined behaviour in random dist serialization (PR93205) 2020-01-09 16:50:51 +00:00
range_access.h libstdc++: Add missing feature test macros 2020-04-22 22:54:34 +01:00
range_cmp.h libstdc++: Define __cpp_lib_ranges macro for C++20 2020-03-27 23:26:03 +00:00
ranges_algo.h libstdc++: Fix some C++20 algorithms to work in parallel mode 2020-05-07 21:43:49 +01:00
ranges_algobase.h libstdc++: Fix incorrect use of memset in ranges::fill_n (PR 94017) 2020-03-03 22:46:39 -05:00
ranges_uninitialized.h libstdc++: Move-only input iterator support in <memory> algorithms (LWG 3355) 2020-03-03 22:44:39 -05:00
refwrap.h libstdc++: Avoid using sizeof with function types (PR 93470) 2020-01-28 13:24:09 +00:00
regex_automaton.h Update copyright years. 2020-01-01 12:51:42 +01:00
regex_automaton.tcc Update copyright years. 2020-01-01 12:51:42 +01:00
regex_compiler.h Update copyright years. 2020-01-01 12:51:42 +01:00
regex_compiler.tcc Update copyright years. 2020-01-01 12:51:42 +01:00
regex_constants.h Update copyright years. 2020-01-01 12:51:42 +01:00
regex_error.h Update copyright years. 2020-01-01 12:51:42 +01:00
regex_executor.h Update copyright years. 2020-01-01 12:51:42 +01:00
regex_executor.tcc Update copyright years. 2020-01-01 12:51:42 +01:00
regex_scanner.h Update copyright years. 2020-01-01 12:51:42 +01:00
regex_scanner.tcc Update copyright years. 2020-01-01 12:51:42 +01:00
regex.h libstdc++: Add comparison operators for string and regex types 2020-04-17 16:40:11 +01:00
regex.tcc Update copyright years. 2020-01-01 12:51:42 +01:00
shared_ptr_atomic.h Update copyright years. 2020-01-01 12:51:42 +01:00
shared_ptr_base.h libstdc++: Add comparison operators to std::shared_ptr (PR 94562) 2020-04-14 21:54:55 +01:00
shared_ptr.h libstdc++: Add comparison operators to std::shared_ptr (PR 94562) 2020-04-14 21:54:55 +01:00
slice_array.h libstdc++: Add comparison operators to types from Numerics clause 2020-04-08 16:51:59 +01:00
specfun.h Update copyright years. 2020-01-01 12:51:42 +01:00
sstream.tcc Update copyright years. 2020-01-01 12:51:42 +01:00
std_abs.h Update copyright years. 2020-01-01 12:51:42 +01:00
std_function.h libstdc++: Add comparison operators to types from Utilities clause 2020-04-15 19:47:48 +01:00
std_mutex.h Update copyright years. 2020-01-01 12:51:42 +01:00
stl_algo.h libstdc++ Hastable: Move std::is_permutation to limit includes 2020-02-29 18:40:39 +01:00
stl_algobase.h libstdc++: Fix some C++20 algorithms to work in parallel mode 2020-05-07 21:43:49 +01:00
stl_bvector.h libstdc++ std::fill overload for std::vector<bool>::iterator 2020-05-06 23:28:22 +02:00
stl_construct.h libstdc++: Fix regression in std::_Construct (PR 94831) 2020-04-28 23:39:38 +01:00
stl_deque.h libstdc++: Add comparison operators to sequence containers 2020-04-17 23:41:04 +01:00
stl_function.h Update copyright years. 2020-01-01 12:51:42 +01:00
stl_heap.h Update copyright years. 2020-01-01 12:51:42 +01:00
stl_iterator_base_funcs.h Update copyright years. 2020-01-01 12:51:42 +01:00
stl_iterator_base_types.h libstdc++: Define __cpp_lib_ranges macro for C++20 2020-03-27 23:26:03 +00:00
stl_iterator.h libstdc++: Fix common_iterator::operator-> [PR95322] 2020-05-26 16:17:34 -04:00
stl_list.h libstdc++: Add comparison operators to sequence containers 2020-04-17 23:41:04 +01:00
stl_map.h libstdc++: Remove non-standard feature test macros 2020-04-22 22:54:34 +01:00
stl_multimap.h libstdc++: Add comparison operators to associative containers 2020-04-20 17:50:10 +01:00
stl_multiset.h libstdc++: Add comparison operators to associative containers 2020-04-20 17:50:10 +01:00
stl_numeric.h libstdc++: P1645R1 constexpr for <numeric> algorithms 2020-02-26 10:23:17 -05:00
stl_pair.h libstdc++: Fixes for feature test macros (PR 91480) 2020-04-28 23:40:18 +01:00
stl_queue.h libstdc++: Define operator<=> for std::stack and std::queue 2020-04-19 21:30:15 +01:00
stl_raw_storage_iter.h Update copyright years. 2020-01-01 12:51:42 +01:00
stl_relops.h Update copyright years. 2020-01-01 12:51:42 +01:00
stl_set.h libstdc++: Add comparison operators to associative containers 2020-04-20 17:50:10 +01:00
stl_stack.h libstdc++: Define operator<=> for std::stack and std::queue 2020-04-19 21:30:15 +01:00
stl_tempbuf.h Update copyright years. 2020-01-01 12:51:42 +01:00
stl_tree.h libstdc++: Add comparison operators to associative containers 2020-04-20 17:50:10 +01:00
stl_uninitialized.h Update copyright years. 2020-01-01 12:51:42 +01:00
stl_vector.h libstdc++: Add comparison operators to sequence containers 2020-04-17 23:41:04 +01:00
stream_iterator.h libstdc++: Fix compilation with released versions of Clang 2020-03-18 12:55:29 +00:00
streambuf_iterator.h libstdc++: Fix compilation with released versions of Clang 2020-03-18 12:55:29 +00:00
streambuf.tcc Update copyright years. 2020-01-01 12:51:42 +01:00
string_view.tcc Update copyright years. 2020-01-01 12:51:42 +01:00
stringfwd.h Update copyright years. 2020-01-01 12:51:42 +01:00
uniform_int_dist.h libstdc++: Reduce header dependencies for C++20 (PR 92546) 2020-02-17 15:43:43 +00:00
unique_lock.h Update copyright years. 2020-01-01 12:51:42 +01:00
unique_ptr.h libstdc++: Add comparison operators to std::shared_ptr (PR 94562) 2020-04-14 21:54:55 +01:00
unordered_map.h libstdc++: Remove non-standard feature test macros 2020-04-22 22:54:34 +01:00
unordered_set.h libstdc++: Remove operator!= overloads for unordered containers 2020-04-19 21:05:32 +01:00
uses_allocator.h Update copyright years. 2020-01-01 12:51:42 +01:00
valarray_after.h Update copyright years. 2020-01-01 12:51:42 +01:00
valarray_array.h Update copyright years. 2020-01-01 12:51:42 +01:00
valarray_array.tcc Update copyright years. 2020-01-01 12:51:42 +01:00
valarray_before.h Update copyright years. 2020-01-01 12:51:42 +01:00
vector.tcc Update copyright years. 2020-01-01 12:51:42 +01:00