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

--- Comment #2 from CVS 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:efeca0ac4155b76ce713155f190422aac20537c5

commit r12-295-gefeca0ac4155b76ce713155f190422aac20537c5
Author: Patrick Palka <ppa...@redhat.com>
Date:   Thu Apr 29 13:43:00 2021 -0400

    c++: Overeager use of deleted function before ADL [PR68942]

    Here, at template definition time, ordinary name lookup for 'foo(t)'
    finds only the deleted function, and so we form a CALL_EXPR thereof.
    Later at instantiation time, when initially substituting into this
    CALL_EXPR with T=N::A, we end up calling mark_used on this deleted
    function (since it's the only function in the overload set), triggering
    a bogus "use of deleted function error", before we get to augment the
    overload set via ADL.

    This patch fixes this issue by using the tf_conv flag to disable
    mark_used during the initial substitution into the callee of a
    CALL_EXPR when KOENIG_P, since at this point we're still figuring out
    which functions are candidates.

    gcc/cp/ChangeLog:

            PR c++/68942
            * pt.c (tsubst_copy_and_build) <case CALL_EXPR>: When KOENIG_P,
            set tf_conv during the initial substitution into the function.

    gcc/testsuite/ChangeLog:

            PR c++/68942
            * g++.dg/template/koenig12.C: New test.

Reply via email to