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

--- Comment #9 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Patrick Palka <[email protected]>:

https://gcc.gnu.org/g:83aab2f73661ac8aa1643d58d2fbfed87d5c1601

commit r16-5930-g83aab2f73661ac8aa1643d58d2fbfed87d5c1601
Author: Patrick Palka <[email protected]>
Date:   Fri Dec 5 21:09:34 2025 -0500

    libstdc++: Use deducing this in std::bind when available [PR80564]

    Implement the forwarding performed by std::bind via deducing this when
    available, instead of needing 4 operator() overloads.  Using deducing
    this here is more complicated than in other standard call wrappers
    because std::bind is not really "perfect forwarding": it doesn't
    consider value category, and along with const-ness it also forwards
    volatile-ness (until C++20).

    The old implementation suffers from the same problem that other
    pre-C++23 SFINAE-friendly call wrappers have which is solved by using
    deducing this (see p5.5 of the deducing this paper P0847R7).

            PR libstdc++/80564

    libstdc++-v3/ChangeLog:

            * include/std/functional (__cv_like): New.
            (_Bind::_Res_type): Don't define when not needed.
            (_Bind::__dependent): Likewise.
            (_Bind::_Res_type_cv): Likewise.
            (_Bind::operator()) [_GLIBCXX_EXPLICIT_THIS_PARAMETER]:
            Define as two instead of four overloads using deducing
            this.
            * testsuite/20_util/bind/cv_quals_2.cc: Ignore SFINAE
            diagnostics inside headers.
            * testsuite/20_util/bind/ref_neg.cc: Likewise.
            * testsuite/20_util/bind/80564.cc: New test.

    Reviewed-by: Tomasz KamiÅski <[email protected]>
    Reviewed-by: Jonathan Wakely <[email protected]>

Reply via email to