C and C++


LANG.STRUCT.USING.MDECL : Misplaced Using Declaration

Summary

A using declaration refers to a name that is subsequently re-declared.

Properties

Class Name Misplaced Using Declaration
Significance style
Mnemonic LANG.STRUCT.USING.MDECL
Categories
AUTOSARC++14 AUTOSARC++14:A7-3-1 All overloads of a function shall be visible from where it is called.
MisraC++2008 MisraC++2008:7-3-5 Multiple declarations for an identifier in the same namespace shall not straddle a using-declaration for that identifier.
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="Misplaced Using Declaration"
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 "stdio.h"

namespace MYNS {
  int myfunc(long int n) {return 5;}
}

using MYNS::myfunc;  // 'Misplaced Using Declaration' warning issued here

namespace MYNS {
  int myfunc(int n) {return 0;}

  int caller1(void){
     return myfunc(1);
  }
}

// this is a better location for the using declaration

namespace MYOTHERNS {
  int caller2(void){
    return myfunc(2);
 }
}

int caller3(void){
  return myfunc(3);
}

int main(void){
  printf("%d\n", MYNS::caller1());           // prints 0
  printf("%d\n", MYOTHERNS::caller2());      // prints 5
  printf("%d\n", caller3());                 // prints 5

  return 0;
}

Relevant Configuration File Parameters

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