// RUN: %check_clang_tidy -std=c++17-or-later %s modernize-loop-convert %t struct S { int a{0}; int b{1}; }; template struct array { T *begin() { return data; } const T* cbegin() const { return data; } T *end() { return data + Size; } const T *cend() const { return data + Size; } T data[Size]; }; const int N = 6; S Arr[N]; void f() { int Sum = 0; for (int I = 0; I < N; ++I) { auto [a, b] = Arr[I]; Sum += a + b; } // CHECK-MESSAGES: :[[@LINE-4]]:3: warning: use range-based for loop instead [modernize-loop-convert] // CHECK-FIXES: for (auto [a, b] : Arr) { // CHECK-FIXES-NEXT: Sum += a + b; array arr; for (auto* It = arr.begin(); It != arr.end(); ++It) { auto [a, b] = *It; Sum = a + b; } // CHECK-MESSAGES: :[[@LINE-4]]:3: warning: use range-based for loop instead [modernize-loop-convert] // CHECK-FIXES: for (auto [a, b] : arr) { // CHECK-FIXES-NEXT: Sum = a + b; for (auto* It = arr.cbegin(); It != arr.cend(); ++It) { auto [a, b] = *It; Sum = a + b; } // CHECK-MESSAGES: :[[@LINE-4]]:3: warning: use range-based for loop instead [modernize-loop-convert] // CHECK-FIXES: for (auto [a, b] : arr) { // CHECK-FIXES-NEXT: Sum = a + b; }