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

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

https://gcc.gnu.org/g:1c522c9eafa5b86b78cd7b3044e120762fb4c879

commit r14-6899-g1c522c9eafa5b86b78cd7b3044e120762fb4c879
Author: Patrick Palka <ppa...@redhat.com>
Date:   Wed Jan 3 15:43:28 2024 -0500

    c++: bad direct reference binding via conv fn [PR113064]

    When computing a direct reference binding via a conversion function
    yields a bad conversion, reference_binding incorrectly commits to that
    conversion instead of trying a conversion via a temporary.  This causes
    us to reject the first testcase because the bad direct conversion to B&&
    via the && conversion operator prevents us from considering the good
    conversion via the & conversion operator and a temporary.  (Similar
    story for the second testcase.)

    This patch fixes this by making reference_binding not prematurely commit
    to such a bad direct conversion.  We still fall back to it if using a
    temporary also fails (otherwise the diagnostic for cpp0x/explicit7.C
    regresses).

            PR c++/113064

    gcc/cp/ChangeLog:

            * call.cc (reference_binding): Still try a conversion via a
            temporary if a direct conversion was bad.

    gcc/testsuite/ChangeLog:

            * g++.dg/cpp0x/rv-conv4.C: New test.
            * g++.dg/cpp0x/rv-conv5.C: New test.

Reply via email to