[Bug c++/96926] [9/10/11 Regression] Tuple element w/ member reference to incomplete template type rejected

cvs-commit at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Fri Feb 19 04:01:25 GMT 2021


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

--- Comment #8 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Jason Merrill <jason@gcc.gnu.org>:

https://gcc.gnu.org/g:d909ead68214042e9876a8df136d0835273d4b86

commit r11-7289-gd909ead68214042e9876a8df136d0835273d4b86
Author: Jason Merrill <jason@redhat.com>
Date:   Thu Feb 18 21:27:37 2021 -0500

    c++: Tweak PR969626 patch

    It occurred to me that other types of conversions use
rvaluedness_matches_p,
    but those uses don't affect overload resolution, so we shouldn't look at
the
    flag for them.  Fixing that made decltype64.C compile successfully, because
    the non-template candidate was a perfect match, so we now wouldn't consider
    the broken template.  Changing the argument to const& makes it no longer a
    perfect match (because of the added const), so we again get the infinite
    recursion.

    This illustrates the limited nature of this optimization/recursion break;
it
    works for most copy/move constructors because the constructor we're looking
    for is almost always a perfect match.  If it happens to help improve
compile
    time for other calls, that's just a bonus.

    gcc/cp/ChangeLog:

            PR c++/96926
            * call.c (perfect_conversion_p): Limit rvalueness
            test to reference bindings.

    gcc/testsuite/ChangeLog:

            * g++.dg/cpp0x/decltype64.C: Change argument to const&.


More information about the Gcc-bugs mailing list