[PATCH] D24349: [clang-tidy] Extend readability-container-size-empty to arbitrary class with size() and empty()

Aaron Ballman via cfe-commits cfe-commits at lists.llvm.org
Thu Sep 8 09:17:24 PDT 2016

aaron.ballman added a subscriber: aaron.ballman.
aaron.ballman added a reviewer: aaron.ballman.

Comment at: clang-tidy/readability/ContainerSizeEmptyCheck.cpp:33
@@ +32,3 @@
+  const auto validContainer = namedDecl(
+      has(functionDecl(isPublic(), hasName("size"), returns(isInteger()))),
+      has(functionDecl(isPublic(), hasName("empty"), returns(booleanType()))));
While it's not entirely unreasonable, it makes me uneasy to assume that anything with a size() and empty() member function must be a container. Is there a way to silence false positives aside from disabling the check entirely?

Perhaps this should instead be a user-configurable list of containers that's prepopulated with STL container names?

Also note: `returns(isInteger())` seems a bit permissive. Consider:
bool size() const;

enum E { one };
enum E size() const;
These both will qualify for that matcher, but don't seem like particularly valid indications that the object is a container.


More information about the cfe-commits mailing list