// RUN: %check_clang_tidy -std=c++20 %s readability-container-size-empty %t -- -- -fno-delayed-template-parsing 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 template struct OpEqOnly { OpEqOnly(); bool operator==(const OpEqOnly &other) const; unsigned long size() const; bool empty() const; }; template struct HasSpaceshipMem { HasSpaceshipMem(); bool operator<=>(const HasSpaceshipMem &other) const = default; unsigned long size() const; bool empty() const; }; void returnsVoid() { OpEqOnly OEO; HasSpaceshipMem HSM; if (OEO != OpEqOnly()) ; // CHECK-MESSAGES: :[[@LINE-2]]:7: warning: the 'empty' method should be used to check for emptiness // CHECK-FIXES: if (!OEO.empty()) // CHECK-MESSAGES: :19:8: note: method 'OpEqOnly'::empty() defined here if (HSM != HasSpaceshipMem()) ; // CHECK-MESSAGES: :[[@LINE-2]]:7: warning: the 'empty' method should be used to check for emptiness // CHECK-FIXES: if (!HSM.empty()) // CHECK-MESSAGES: :27:8: note: method 'HasSpaceshipMem'::empty() defined here }