MISRA C++:2008 Rule 7-3-4
using-directives shall not be used
Description
Rule Definition
using-directives shall not be used.
Rationale
using
directives can inadvertently expose more variables to name lookup than you intend. The wider scope for name lookup increases the likelihood of a variable being unintentionally used. For instance:
namespace NS { int i; int j; } using namespace NS;
NS::i
and NS::j
to name lookup, but you might have intended to use only one of the variables.It is preferable to only expose variables that you intend to use or refer to variables by their fully qualified name when you use them. For instance, in the previous example, if you use the variable NS::i
, expose only this variable to name lookup:
using NS::i;
NS::i
instead of i
in all instances.Polyspace Implementation
The rule checker reports a violation on using
directives. These directives contain the keyword using
followed by the keyword namespace
and the name of a namespace. The using
directives make all members of a namespace available to the current scope.
The checker does not flag using
declarations. These declarations also contain the keyword using
but not the keyword namespace
. The using
declarations only expose specific members of a namespace.
Troubleshooting
If you expect a rule violation but Polyspace® does not report it, see Diagnose Why Coding Standard Violations Do Not Appear as Expected.
Examples
Check Information
Group: Declarations |
Category: Required |
Version History
Introduced in R2013b