misc-use-anonymous-namespace¶
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.
const
orconstexpr
variables, since they already have implicit internal linkage in C++.
Examples:
// Bad
static void foo();
static int x;
// Good
namespace {
void foo();
int x;
} // namespace