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]>
