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

--- Comment #8 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Jonathan Wakely <r...@gcc.gnu.org>:

https://gcc.gnu.org/g:3e52eb28c537aaa03afb78ef9dff8325c5f41f78

commit r15-8966-g3e52eb28c537aaa03afb78ef9dff8325c5f41f78
Author: Jonathan Wakely <jwak...@redhat.com>
Date:   Wed Mar 26 11:21:32 2025 +0000

    libstdc++: Fix std::ranges::iter_move for function references [PR119469]

    The result of std::move (or a cast to an rvalue reference) on a function
    reference is always an lvalue. Because std::ranges::iter_move was using
    the type std::remove_reference_t<X>&& as the result of std::move, it was
    giving the wrong type for function references. Use a decltype-specifier
    with declval<remove_reference_t<X>>() instead of just using the
    remove_reference_t<X>&& type directly. This gives the right result,
    while still avoiding the cost of doing overload resolution for
    std::move.

    libstdc++-v3/ChangeLog:

            PR libstdc++/119469
            * include/bits/iterator_concepts.h (_IterMove::__result): Use
            decltype-specifier instead of an explicit type.
            * testsuite/24_iterators/customization_points/iter_move.cc:
            Check results for function references.

    Reviewed-by: Tomasz KamiÅski <tkami...@redhat.com>

Reply via email to