[clang] [clang][NFC] Use range-based for loop and algorithms in `SemaDeclCXX.cpp` (PR #169938)

Aaron Ballman via cfe-commits cfe-commits at lists.llvm.org
Tue Dec 2 11:11:11 PST 2025


================
@@ -17969,13 +17949,9 @@ DeclResult Sema::ActOnTemplatedFriendTag(
 
   if (Invalid) return true;
 
-  bool isAllExplicitSpecializations = true;
-  for (unsigned I = TempParamLists.size(); I-- > 0; ) {
-    if (TempParamLists[I]->size()) {
-      isAllExplicitSpecializations = false;
-      break;
-    }
-  }
+  const bool isAllExplicitSpecializations = std::all_of(
----------------
AaronBallman wrote:

> I can't find this in the coding standard and I can't find a Discourse topic about this. Is there documentation somewhere that I can read to get the justification for this? There are counter-examples in this same file (for instance, in `Sema::CheckShadowInheritedFields`) and it definitely helps my understanding to know a variable isn't mutated.

We're consistently inconsistent because folks will slip them in from time to time, but I concur with the review feedback; drop top-level `const` on anything that's not a data member. The reason is: very little of the code base is `const` correct (we're slowly trying to improve that) and we have plenty of `const_cast` use in the code base. So declaring the object as actually `const` is in danger of accidentally turning that into UB (whereas leaving it non-`const` means we still have a maintenance task to attend to, but at least it's not turned into a bug).

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


More information about the cfe-commits mailing list