T018
Using namespace is not allowed in header files
Description:
Using namespace directives are not allowed in header files.
The using namespace directive imports names from the given namespace and when used in a header file influences the global namespace of all the files that directly or indirectly include this header file.
It is imaginable to use the using namespace directive in a limited scope in a header file (for example in a template or inline function definition), but for the sake of consistency this is also discouraged.
Compliance:
C++ Coding Standards
Hide source code
# using namespace are not allowed in header files
foreach fileName [getSourceFileNames] {
set extension [file extension $fileName]
if {[lsearch {.h .hh .hpp .hxx .ipp} $extension] != -1} {
set state "start"
foreach token [getTokens $fileName 1 0 -1 -1 {using namespace identifier}] {
set type [lindex $token 3]
if {$state == "using" && $type == "namespace"} {
report $fileName $usingLine "using namespace not allowed in header file"
}
if {$type == "using"} {
set usingLine [lindex $token 1]
}
set state $type
}
}
}
Rule index