1 | // RUN: %check_clang_tidy -std=c++17-or-later %s modernize-loop-convert %t |
2 | |
3 | struct S { |
4 | int a{0}; |
5 | int b{1}; |
6 | }; |
7 | |
8 | template <typename T, unsigned long Size> |
9 | struct array { |
10 | |
11 | T *begin() { return data; } |
12 | const T* cbegin() const { return data; } |
13 | T *end() { return data + Size; } |
14 | const T *cend() const { return data + Size; } |
15 | |
16 | T data[Size]; |
17 | }; |
18 | |
19 | const int N = 6; |
20 | S Arr[N]; |
21 | |
22 | void f() { |
23 | int Sum = 0; |
24 | |
25 | for (int I = 0; I < N; ++I) { |
26 | auto [a, b] = Arr[I]; |
27 | Sum += a + b; |
28 | } |
29 | // CHECK-MESSAGES: :[[@LINE-4]]:3: warning: use range-based for loop instead [modernize-loop-convert] |
30 | // CHECK-FIXES: for (auto [a, b] : Arr) { |
31 | // CHECK-FIXES-NEXT: Sum += a + b; |
32 | |
33 | array<S, N> arr; |
34 | for (auto* It = arr.begin(); It != arr.end(); ++It) { |
35 | auto [a, b] = *It; |
36 | Sum = a + b; |
37 | } |
38 | // CHECK-MESSAGES: :[[@LINE-4]]:3: warning: use range-based for loop instead [modernize-loop-convert] |
39 | // CHECK-FIXES: for (auto [a, b] : arr) { |
40 | // CHECK-FIXES-NEXT: Sum = a + b; |
41 | |
42 | for (auto* It = arr.cbegin(); It != arr.cend(); ++It) { |
43 | auto [a, b] = *It; |
44 | Sum = a + b; |
45 | } |
46 | // CHECK-MESSAGES: :[[@LINE-4]]:3: warning: use range-based for loop instead [modernize-loop-convert] |
47 | // CHECK-FIXES: for (auto [a, b] : arr) { |
48 | // CHECK-FIXES-NEXT: Sum = a + b; |
49 | } |
50 | |