C and C++


LANG.STRUCT.DECL.SNM : Modification of Standard Namespaces

Summary

[C++ only] Code introduces a new declaration into the std namespace.

Properties

Class Name Modification of Standard Namespaces
Significance style
Mnemonic LANG.STRUCT.DECL.SNM
Categories
AUTOSARC++14 AUTOSARC++14:A17-6-1 Non-standard entities shall not be added to standard namespaces.
CERT-CPP CERT-CPP:DCL58-CPP Do not modify the standard namespaces
Availability Available for C++ only (not C).
Enabling Checks for this warning class are disabled by default, and require the unnormalized C ASTs for the project. To enable them, add the following WARNING_FILTER rule and RETAIN_UNNORMALIZED_C_AST specification to the project configuration file.
RETAIN_UNNORMALIZED_C_AST = Yes
WARNING_FILTER += allow class="Modification of Standard Namespaces"
Note that retaining the unnormalized ASTs will increase the disk space used to store the project representation, and may make the analysis take longer.

Example

#include <vector>

// namespace 'std' is reserved in the C++ standard
namespace std {
  int myvar;                // 'Modification of Standard Namespaces' warning issued here

  namespace subspaceA {}    // 'Modification of Standard Namespaces' warning issued here
}

// namespace 'posix' is also reserved in the C++ standard
namespace posix {}                    // ok: this does not modify namespace 'posix'

namespace mynamespace {
  namespace std {
    int myothervar;                   // ok: belongs to namespace 'mynamespace::std' (not 'std')
    namespace subspaceB {}            // ok: belongs to namespace 'mynamespace::std' (not 'std')
  }
}

namespace std::subspaceC {} // 'Modification of Standard Namespaces' warning issued here

Relevant Configuration File Parameters

The following configuration file parameters affect checks for this warning class.