erichkeane added inline comments.
================ Comment at: clang/lib/Sema/SemaTemplateDeduction.cpp:3598 + FD->isDefined(FDFriend, true) && + FDFriend->getFriendObjectKind() != Decl::FriendObjectKind::FOK_None) { + // if Function defined by inline friend, use inline fried as DeclContext ---------------- HerrCai0907 wrote: > erichkeane wrote: > > HerrCai0907 wrote: > > > erichkeane wrote: > > > > So in what case would the currently-instantiated definition NOT also be > > > > a friend? I would think this last condition should be able to be an > > > > assert instead. > > > Last condition cannot be an assert, define and declare in difference > > > place is common case, what we need to identifier in here is inlined > > > friend define. > > Can you be more clear here? WHEN can a definition and declaration NOT have > > the same friend object kind? THAT is probably incorrect a bug. > Sorry I cannot get the point. > Here I have 3 conditions: > 1. FD->getFriendObjectKind() == Decl::FriendObjectKind::FOK_None > FD(declaration) is not friend object. > 2. FD->isDefined(FDFriend, true) > get FDFriend(definition) from FD(declaration). > 3. FDFriend->getFriendObjectKind() != Decl::FriendObjectKind::FOK_None) > FDFriend(definition) is friend object. > > matching those 3 condition and then we can say FDFriend is a inline friend > like > ``` > template <class F1> int foo(F1 X); // FD > template <int A1> struct A { > template <class F1> friend int foo(F1 X) { return A1; } // FDFriend > }; > ``` Ok, my question is: WHEN is #3 "false" but #1 and #2 are "true"? It should not be possible for #1 to be "true" but #3 to be "false", as far as I know. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D149009/new/ https://reviews.llvm.org/D149009 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits