// functions called begin() and end() taking the container as an argument
// are also allowed.
TypeMatcher RecordWithBeginEnd = qualType(anyOf(
- qualType(
- isConstQualified(),
- hasUnqualifiedDesugaredType(recordType(hasDeclaration(cxxRecordDecl(
- hasMethod(cxxMethodDecl(hasName("begin"), isConst())),
- hasMethod(cxxMethodDecl(hasName("end"),
- isConst())))) // hasDeclaration
- ))), // qualType
+ qualType(isConstQualified(),
+ hasUnqualifiedDesugaredType(recordType(hasDeclaration(
+ cxxRecordDecl(isSameOrDerivedFrom(cxxRecordDecl(
+ hasMethod(cxxMethodDecl(hasName("begin"), isConst())),
+ hasMethod(cxxMethodDecl(hasName("end"),
+ isConst())))))) // hasDeclaration
+ ))), // qualType
qualType(unless(isConstQualified()),
hasUnqualifiedDesugaredType(recordType(hasDeclaration(
- cxxRecordDecl(hasMethod(hasName("begin")),
- hasMethod(hasName("end"))))))) // qualType
+ cxxRecordDecl(isSameOrDerivedFrom(cxxRecordDecl(
+ hasMethod(hasName("begin")),
+ hasMethod(hasName("end"))))))))) // qualType
));
StatementMatcher SizeCallMatcher = cxxMemberCallExpr(
:doc: `readability-redundant-string-cstr <clang-tidy/checks/readability/redundant-string-cstr>`
check.
+- Improved :doc:`modernize-loop-convert <clang-tidy/checks/modernize/loop-convert>`
+ to check for container functions ``begin``/``end`` etc on base classes of the container
+ type, instead of only as direct members of the container type itself.
+
Removed checks
^^^^^^^^^^^^^^
const dependent<NonTriviallyCopyable> *Pconstv;
transparent<dependent<int>> Cv;
+dependent_derived<int> VD;
void f() {
int Sum = 0;
// CHECK-FIXES: for (int I : V)
// CHECK-FIXES-NEXT: printf("Fibonacci number is %d\n", I);
// CHECK-FIXES-NEXT: Sum += I + 2;
+
+ for (int I = 0, E = VD.size(); E != I; ++I) {
+ printf("Fibonacci number is %d\n", VD[I]);
+ Sum += VD[I] + 2;
+ }
+ // CHECK-MESSAGES: :[[@LINE-4]]:3: warning: use range-based for loop instead
+ // CHECK-FIXES: for (int I : VD)
+ // CHECK-FIXES-NEXT: printf("Fibonacci number is %d\n", I);
+ // CHECK-FIXES-NEXT: Sum += I + 2;
}
// Ensure that 'const auto &' is used with containers of non-trivial types.