HerrCai0907 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 ---------------- 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 }; ``` 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