tidy - misc-use-anonymous-namespace — Extra Clang Tools 22.0.0git documentation (original) (raw)
Finds instances of static functions or variables declared at global scope that could instead be moved into an anonymous namespace.
Anonymous namespaces are the “superior alternative” according to the C++ Standard. static was proposed for deprecation, but later un-deprecated to keep C compatibility [1]. static is an overloaded term with different meanings in different contexts, so it can create confusion.
The following uses of static will not be diagnosed:
- Functions or variables in header files, since anonymous namespaces in headers is considered an antipattern. Allowed header file extensions can be configured via the global option HeaderFileExtensions.
constorconstexprvariables, since they already have implicit internal linkage in C++.
Examples:
// Bad static void foo(); static int x;
// Good namespace { void foo(); int x; } // namespace