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

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

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

commit r14-10655-gb5ed381d05e0ed9edf2f320b71f8775ea96a4866
Author: Patrick Palka <ppa...@redhat.com>
Date:   Fri Aug 9 21:15:25 2024 -0400

    c++: inherited CTAD fixes [PR116276]

    This implements the overlooked inherited vs non-inherited guide
    tiebreaker from P2582R1.  This requires tracking inherited-ness of a
    guide, for which it seems natural to reuse the lang_decl_fn::context
    field which for a constructor tracks its inherited-ness.

    This patch also works around CLASSTYPE_CONSTRUCTORS not reliably
    returning all inherited constructors (due to some using-decl handling
    quirks in in push_class_level_binding) by iterating over TYPE_FIELDS
    instead.

    This patch also makes us recognize another written form of inherited
    constructor, 'using Base<T>::Base::Base' whose USING_DECL_SCOPE is a
    TYPENAME_TYPE.

            PR c++/116276

    gcc/cp/ChangeLog:

            * call.cc (joust): Implement P2582R1 inherited vs non-inherited
            guide tiebreaker.
            * cp-tree.h (lang_decl_fn::context): Document usage in
            deduction_guide_p FUNCTION_DECLs.
            (inherited_guide_p): Declare.
            * pt.cc (inherited_guide_p): Define.
            (set_inherited_guide_context): Define.
            (alias_ctad_tweaks): Use set_inherited_guide_context.
            (inherited_ctad_tweaks): Recognize some inherited constructors
            whose scope is a TYPENAME_TYPE.
            (ctor_deduction_guides_for): For C++23 inherited CTAD, iterate
            over TYPE_FIELDS instead of CLASSTYPE_CONSTRUCTORS to recognize
            all inherited constructors.

    gcc/testsuite/ChangeLog:

            * g++.dg/cpp23/class-deduction-inherited4.C: Remove an xfail.
            * g++.dg/cpp23/class-deduction-inherited5.C: New test.
            * g++.dg/cpp23/class-deduction-inherited6.C: New test.

    Reviewed-by: Jason Merrill <ja...@redhat.com>
    (cherry picked from commit 8cc67b520968ca9a13fd96896522aa66e39a99e2)

Reply via email to