...
| Code Block |
|---|
namespace MyNamespace {
int ilength;
}
namespace MyNamespace {
int iwidth;
}
void f() {
MyNamespace::ilength = MyNamespace::iwidth = 12;
} |
The standard library introduces the namespace std for standards-provided declarations such as std::string, std::vector, and std::for_each. However, it is undefined behavior to introduce new declarations in namespace std except under special circumstances. The C++ Standard, [namespace.std], paragraphs 1 and 2 [ISO/IEC 14882-2014], states the following:
...
Altering the standard namespace can cause undefined behavior in the C++ standard library.
Rule | Severity | Likelihood | Detectable |
|---|
Repairable | Priority | Level |
|---|---|---|
DCL58-CPP | High | Unlikely |
Yes | No | P6 | L2 |
Automated Detection
Tool | Version | Checker | Description |
|---|
4631, 4032, 4035
| Axivion Bauhaus Suite |
| CertC++-DCL58 | |||||||
| CodeSonar |
| LANG.STRUCT.DECL.SNM | Modification of Standard Namespaces | ||||||
| Helix QAC |
| C++3180, C++3181, C++3182 | |||||||
| Klocwork |
| CERT.DCL.STD_NS_MODIFIED | |||||||
| Parasoft C/C++test |
| CERT_CPP-DCL58-a | Do not modify the standard namespaces 'std' and 'posix' | ||||||
| Polyspace Bug Finder |
| CERT C++: DCL58-CPP | Checks for modification of standard namespaces (rule fully covered) | ||||||
| PVS-Studio |
| V1061 |
| SonarQube C/C++ Plugin |
| S3470 |
Related Vulnerabilities
Search for other vulnerabilities resulting from the violation of this rule on the CERT website.
Related Guidelines
Bibliography
| [INCITS 2014] | Issue 2139, "What Is a User-Defined Type?" |
| [ISO/IEC 14882-2014] | Subclause 17.6.4.2.1, "Namespace std"Subclause 17.6.4.2.2, "Namespace posix" |
...