Using namespace is not allowed in header files

# 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

Show source code for this rule

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