C and C++


LANG.STRUCT.USING.HDECL : Using Declaration in Header File

Summary

An occurrence of a using declaration in a header file (defined as a source file that is #included in a compilation unit), unless it is class-scoped or function-scoped.

Properties

Class Name Using Declaration in Header File
Significance style
Mnemonic LANG.STRUCT.USING.HDECL
Categories
AUTOSARC++14 AUTOSARC++14:M7-3-6 Using-directives and using-declarations (excluding class scope or function scope using-declarations) shall not be used in header files.
MisraC++2008 MisraC++2008:7-3-6 using-directives and using-declarations (excluding class scope or function scope using-declarations) shall not be used in header files.
Availability Available for C and 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="Using Declaration in Header File"
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

/* LANG.STRUCT.USING.HDECL.cpp */

#include "LANG.STRUCT.USING.HDECL.hpp"
/* LANG.STRUCT.USING.HDECL.hpp */

namespace ns_declaration{
  int declA;
  int declB;
}

namespace ns_directive{
  int dirA;
  int dirB;
}

namespace ns_other{
  int otherA;
  int otherB;
}

using ns_declaration::declA;   /* 'Using Declaration in Header File' warning issued here. */

using namespace ns_directive;           /* using directive (not declaration)
                                         * (Will trigger 'Using Directive' and 'Using Directive in Header File' if enabled.) */

int myfunc(void){
  using ns_declaration::declB;          /* ok: function-scoped */
  return declB;
}

class MyClass{
protected:
  int f(void){return 5;}
};

class MyDerivedClass : MyClass{
public:
  using MyClass::f;                     /* ok: class-scoped */
};

Relevant Configuration File Parameters

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