[clang] [Clang] Implement C++26’s P2893R3 ‘Variadic friends’ (PR #101448)

Younan Zhang via cfe-commits cfe-commits at lists.llvm.org
Thu Aug 1 08:12:11 PDT 2024


================
@@ -487,7 +487,26 @@ void DeclPrinter::VisitDeclContext(DeclContext *DC, bool Indent) {
     }
 
     this->Indent();
-    Visit(*D);
+
+    // Group friend declarations if need be.
+    if (isa<FriendDecl>(*D)) {
+      auto *FD = cast<FriendDecl>(*D);
+      VisitFriendDecl(FD);
+      SourceLocation FriendLoc = FD->getFriendLoc();
+
+      // Use a separate iterator; 'D' is always one declaration 'behind' in
+      // this loop; the last friend printed here (or the first printed just
+      // now before this loop if there are no subsequent friends) will be
+      // skipped by the '++D' of the outer loop.
+      for (DeclContext::decl_iterator It; It = std::next(D), It != DEnd; ++D) {
+        auto NextFriend = dyn_cast<FriendDecl>(*It);
----------------
zyn0217 wrote:

ditto, we prefer `auto *`

https://github.com/llvm/llvm-project/pull/101448


More information about the cfe-commits mailing list