| // RUN: %check_clang_tidy -std=c++20 %s modernize-loop-convert %t -- -- -I %S/Inputs/modernize-loop-convert |
| |
| namespace std { |
| struct strong_ordering { |
| int n; |
| constexpr operator int() const { return n; } |
| static const strong_ordering equal, greater, less; |
| }; |
| constexpr strong_ordering strong_ordering::equal = {0}; |
| constexpr strong_ordering strong_ordering::greater = {1}; |
| constexpr strong_ordering strong_ordering::less = {-1}; |
| } // namespace std |
| |
| struct HasSpaceshipMem { |
| typedef int value_type; |
| |
| struct iterator { |
| value_type &operator*(); |
| const value_type &operator*() const; |
| iterator &operator++(); |
| void insert(value_type); |
| value_type X; |
| constexpr auto operator<=>(const HasSpaceshipMem::iterator &) const = default; |
| }; |
| |
| iterator begin(); |
| iterator end(); |
| }; |
| |
| struct OpEqOnly { |
| typedef int value_type; |
| struct iterator { |
| value_type &operator*(); |
| const value_type &operator*() const; |
| iterator &operator++(); |
| bool operator==(const iterator &other) const; |
| void insert(value_type); |
| value_type X; |
| }; |
| iterator begin(); |
| iterator end(); |
| }; |
| |
| void rewritten() { |
| OpEqOnly Oeo; |
| for (OpEqOnly::iterator It = Oeo.begin(), E = Oeo.end(); It != E; ++It) { |
| (void)*It; |
| } |
| // CHECK-MESSAGES: :[[@LINE-3]]:3: warning: use range-based for loop instead |
| // CHECK-FIXES: for (int & It : Oeo) |
| // CHECK-FIXES-NEXT: (void)It; |
| |
| HasSpaceshipMem Hsm; |
| for (HasSpaceshipMem::iterator It = Hsm.begin(), E = Hsm.end(); It != E; ++It) { |
| (void)*It; |
| } |
| // CHECK-MESSAGES: :[[@LINE-3]]:3: warning: use range-based for loop instead |
| // CHECK-FIXES: for (int & It : Hsm) |
| // CHECK-FIXES-NEXT: (void)It; |
| } |