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

--- Comment #8 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:3f09320bf65312a2f442aca514a35a382a6521f1

commit r16-6366-g3f09320bf65312a2f442aca514a35a382a6521f1
Author: Egas Ribeiro <[email protected]>
Date:   Fri Dec 19 21:34:55 2025 +0000

    c++: Fix member-like friend detection for non-template classes [PR122550]

    member_like_constrained_friend_p was incorrectly returning true for
    constrained friend function templates declared in non-template classes,
    causing them to be treated as distinct from their forward declarations.
    This led to ambiguity errors at call sites.

    Per [temp.friend]/9, a constrained friend is only "member-like" (and thus
    declares a different function) in two cases:
    1. Non-template friends with constraints (must be in a templated class)
    2. Template friends whose constraints depend on outer template parameters

    In both cases, the enclosing class scope must be templated. The fix adds
    a check for CLASSTYPE_IMPLICIT_INSTANTIATION to ensure the friend's
    context is actually a class template, not a plain class or explicit
    specialization.

            PR c++/122550

    gcc/cp/ChangeLog:

            * decl.cc (member_like_constrained_friend_p): Check that the
            friend's enclosing class is an implicit instantiation.

    gcc/testsuite/ChangeLog:

            * g++.dg/cpp2a/concepts-friend18.C: New test.
            * g++.dg/cpp2a/concepts-friend18a.C: New test.

    Signed-off-by: Egas Ribeiro <[email protected]>
    Reviewed-by: Patrick Palka <[email protected]>

Reply via email to