[PATCH] libstdc++: Fix common_iterator::operator-> [PR95322]

Jonathan Wakely jwakely@redhat.com
Tue May 26 19:57:52 GMT 2020


On 26/05/20 15:18 -0400, Patrick Palka via Libstdc++ wrote:
>This patch fixes the definition of common_iterator::operator-> when the
>underlying iterator type'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.

OK. I put it at namespace scope originally because it only depends on
the iterator not the sentinel, so we'd only instantiate it once for
common_iterator<X,Y> and common_iterator<X,Z>, but this is fine.

>(This bug was found when attempting to use views::common to work around
>the compile failure of the testcase in PR95322.)
>
>Tested on x86_64-pc-linux-gnu, does this look OK to commit?

Yes, thanks. OK for gcc-10 too.

Please be aware of the new ChangeLog policies announced on the lists
recently.




More information about the Libstdc++ mailing list