[Bug libstdc++/100290] join_view::_Iterator::operator++ copies _M_parent->_M_inner when _S_ref_is_glvalue is false

cvs-commit at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Tue Apr 27 18:08:20 GMT 2021


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=100290

--- Comment #3 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Patrick Palka <ppalka@gcc.gnu.org>:

https://gcc.gnu.org/g:85ef4b8d4eb3313a48b79c7e752891f9646bb246

commit r12-173-g85ef4b8d4eb3313a48b79c7e752891f9646bb246
Author: Patrick Palka <ppalka@redhat.com>
Date:   Tue Apr 27 14:07:46 2021 -0400

    libstdc++: Fix up lambda in join_view::_Iterator::operator++ [PR100290]

    Currently, the return type of this lambda is decltype(auto), so the
    lambda ends up returning a copy of _M_parent->_M_inner rather than a
    reference to it when _S_ref_glvalue is false.  This means _M_inner and
    ranges::end(__inner_range) are respectively an iterator and sentinel for
    different ranges, so comparing them is undefined.

    libstdc++-v3/ChangeLog:

            PR libstdc++/100290
            * include/std/ranges (join_view::_Iterator::operator++): Correct
            the return type of the lambda to avoid returning a copy of
            _M_parent->_M_inner.
            * testsuite/std/ranges/adaptors/join.cc (test10): New test.


More information about the Gcc-bugs mailing list