Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Infonote
titleGenerated Content

This page is was automatically generated from the "Automated Detection" sections in the individual guidelines. Do not modify this page directly.

Version number:
v3.2

and should not be edited.

Note

The information on this page was provided by outside contributors and has not been verified by SEI CERT.

Tip

The table below can be re-ordered, by clicking column headers.

...

Include Page
PRQA QA-C++_V
PRQA QA-C++_V

Checker

Guideline

0014 DCL52-CPP.

Checker

Guideline

-q & Name CheckMSC34-CPP. Do not modify the standard namespace
-wc "::FILE::@constructor"FIO38-CPP. Do not use a copy of a FILE object for input and output
-wc "::std::vector::[]"STR39-CPP. Range check element access
-wc randMSC30-CPP. Do not use the rand() function for generating pseudorandom numbers
-wc strtokSTR06-CPP. Do not assume that strtok() leaves the parse string unchanged
0064PRE30-CPP. Do not create a universal character name through concatenation
0103, 0105, 0106, 0293,254DCL36-CPP. Do not declare an identifier with conflicting linkage classifications
0424EXP38-CPP. Do not modify constant values
0600,0601,1038,1039PRE05-CPP. Understand macro replacement when concatenating tokens or performing stringification
1000,1001PRE06-CPP. Enclose header files in an inclusion guard
1020,1021, 1025, 1026PRE00-CPP. Avoid defining macros
1023PRE10-CPP. Wrap multistatement macros in a do-while loop
1025,1026DCL00-CPP. Const-qualify immutable objects
1030PRE01-CPP. Use parentheses within macros around parameter names
1031PRE02-CPP. Macro replacement lists should be parenthesized
1038,1039,1100,2075,MSC14-CPP. Do not introduce unnecessary platform dependencies
1067MSC33-CPP. Obey the One Definition Rule
1092PRE07-CPP. Avoid using repeated question marks
1095MSC09-CPP. Character encoding: Use subset of ASCII for safety
14DCL33-CPP. Never qualify a reference type with const or volatile
145, 2845, 2846, 2847,STR31-CPP. Guarantee that storage for character arrays has sufficient space for character data and the null terminator
150STR04-CPP. Use plain char for characters in the basic character set
1500,1502,2980,2981,MSC13-CPP. Detect and remove unused values
1501,1503,2880,2881,MSC07-CPP. Detect and remove dead code
1504, 1505, 1514, 1531, 1532, 1533, 2300, 2313, 2314DCL15-CPP. Declare file-scope objects or functions that do not need external linkage in an unnamed namespace
1504,1505,1531,1533,4113, 4114DCL07-CPP. Minimize the scope of variables and methods
1509MSC33-CPP. Obey the One Definition Rule
1515, 1516, 1517PRE08-CPP. Guarantee that header file names are unique
1520,1521MEM05-CPP. Avoid large stack allocations
1554, 1555, 1556, 1557, 1558,DCL14-CPP. Avoid assumptions about the initialization order between translation units
1559DCL14-CPP. Avoid assumptions about the initialization order between translation units
1710 - but needs -po optionsDCL02-CPP. Use visually distinct identifiers
2001MEM13-CPP. Use smart pointers instead of raw pointers for resource management
2009DCL17-CPP. Declare function parameters that are large data structures and are not changed by the function as const references
2010DCL17-CPP. Declare function parameters that are large data structures and are not changed by the function as const references
2012DCL31-CPP. Do not define variadic functions
2019OOP04-CPP. Prefer not to give virtual functions default argument initializers
2070,2071,2072,2073,2074,DCL11-CPP. Preserve operator semantics when overloading operators
2076,2085,2114,2125,MSC14-CPP. Do not introduce unnecessary platform dependencies
2077,2078,DCL10-CPP. Do not overload the ampersand, comma, logical AND or logical OR operators
2079,2092DCL10-CPP. Do not overload the ampersand, comma, logical AND or logical OR operators
2081,2082, 2090, 2097DCL11-CPP. Preserve operator semantics when overloading operators
2100,2101OOP00-CPP. Declare data members private
2110,2111,2112,2113,MEM41-CPP. Declare a copy constructor, a copy assignment operator, and a destructor in a class that manages resources
2110,2112,2113OOP06-CPP. Create a private copy constructor and assignment operator for non copyable objects
2116OOP34-CPP. Ensure the proper destructor is called for polymorphic objects
2118.4262.4263.4264MEM41-CPP. Declare a copy constructor, a copy assignment operator, and a destructor in a class that manages resources
2120OOP03-CPP. Prefer not to overload virtual functions
2121OOP02-CPP. Do not hide inherited non-virtual member functions
2139,2178,2200,2201,MSC14-CPP. Do not introduce unnecessary platform dependencies
2159OOP07-CPP. Do not inherit from multiple classes that have distinct objects with the same name
2160,2161DCL35-CPP. Do not overload operator new in a different scope than operator delete
2180OOP32-CPP. Ensure that single-argument constructors are marked "explicit"
2181OOP01-CPP. Be careful with the definition of conversion operators
2202,2413,2640,3017,MSC14-CPP. Do not introduce unnecessary platform dependencies
2304,2306,2307,2308,2309INT12-CPP. Do not make assumptions about the type of a plain int bit-field when used in an expression
2310, 1550, 1551, 1552, 1553,DCL14-CPP. Avoid assumptions about the initialization order between translation units
2410,2411ARR00-CPP. Understand when to prefer vectors over arrays
2422,2423INT09-CPP. Ensure enumeration constants map to unique values
2426DCL05-CPP. Use typedefs to improve code readability
2427,2428PRE03-CPP. Prefer typedefs to defines for encoding types
2500,2501,2502,2503,2504,2505DCL01-CPP. Do not reuse variable names in subscopes
2502DCL18-CPP. In a class template, qualify any name that may be found in a dependent base class template
2510OOP31-CPP. Ensure object construction invocations isn't mistaken for a function variable declaration
2515, 2516, 2527, 2528, 4028, 4624, 4629DCL30-CPP. Declare objects with appropriate storage durations
2624OOP04-CPP. Prefer not to give virtual functions default argument initializers
2625DCL31-CPP. Do not define variadic functions
1510 MSC52-CPP. Value-returning functions must return a value from all exit paths
1772 CON53-CPP. Avoid deadlock by locking in a predefined order
1773 CON53-CPP. Avoid deadlock by locking in a predefined order
1774 CON52-CPP. Prevent data races when accessing bit-fields from multiple threads
1775 CON52-CPP. Prevent data races when accessing bit-fields from multiple threads
2012 DCL50-CPP. Do not define a C-style variadic function
2110 MEM51-CPP. Properly deallocate dynamically allocated resources
2111 MEM51-CPP. Properly deallocate dynamically allocated resources
2112 MEM51-CPP. Properly deallocate dynamically allocated resources
2113 MEM51-CPP. Properly deallocate dynamically allocated resources
2118 MEM51-CPP. Properly deallocate dynamically allocated resources
2160 DCL54-CPP. Overload allocation and deallocation functions as a pair in the same scope
2502 DCL53-CPP. Do not write syntactically ambiguous declarations
2510 DCL53-CPP. Do not write syntactically ambiguous declarations
2518 DCL59-CPP. Do not define an unnamed namespace in a header file
2625 DCL50-CPP. Do not define a C-style variadic function
2668 CTR54-CPP. Do not subtract iterators that do not refer to the same container
2726 EXP53-CPP. Do not read uninitialized memory
2727 EXP53-CPP. Do not read uninitialized memory
2728 EXP53-CPP. Do not read uninitialized memory
2761 CTR54-CPP. Do not subtract iterators that do not refer to the same container
2762 CTR54-CPP. Do not subtract iterators that do not refer to the same container
2763 CTR54-CPP. Do not subtract iterators that do not refer to the same container
2766 CTR54-CPP. Do not subtract 2761,2762,2763,2766,ARR36-CPP. Do not subtract or compare two pointers or iterators that do not refer to the same array or container
2767 ,2768,2771,2772, CTR54ARR36-CPP. Do not subtract or compare two pointers or iterators that do not refer to the same array or container
2773 2768 ARR36 CTR54-CPP. Do not subtract or compare two pointers or iterators that do not refer to the same array or container
2810 OOP552791,2792,2793,,3321,3322INT34-CPP. Do not shift a negative number of bits or more bits than exist in the operand
2800,2801,2802,2803INT32-CPP. Ensure that operations on signed integers do not result in overflow
2800,2801,2802,2803,INT08-CPP. Verify that all integer values are in range
2810,2811,2812,2813,EXP34-CPP. Ensure a null pointer is not dereferenced
2814,2820,2821,2822,EXP34-CPP. Ensure a null pointer is not dereferenced
2823,2824EXP34-CPP. Ensure a null pointer is not dereferenced
2831,2832,2833,2834INT33-CPP. Ensure that division and modulo operations do not result in divide-by-zero errors
2840, 2841, 2842, 2843, 2844EXP03-CPP. Do not assume the size of a class or struct is the sum of the sizes of its members
2848, 2849STR31-CPP. Guarantee that storage for character arrays has sufficient space for character data and the null terminator
2882,2883,2877,2032,MSC07-CPP. Detect and remove dead code
2910,2911,2912,2913INT08-CPP. Verify that all integer values are in range
2910,2911,2912,2913INT30-CPP. Ensure that unsigned integer operations do not wrap
2930, 2931, 2932, 2933,ARR38-CPP. Do not add or subtract an integer to a pointer or iterator if the resulting value does not refer to a valid element in the array or container
2934, 2950, 2951, 2952,ARR38-CPP. Do not add or subtract an integer to a pointer or iterator if the resulting value does not refer to a valid element in the array or container
2940,2941,2942,2943,INT16-CPP. Do not make assumptions about representation of signed integers
2945,2946,2947,2948INT16-CPP. Do not make assumptions about representation of signed integers
2953ARR38-CPP. Do not add or subtract an integer to a pointer or iterator if the resulting value does not refer to a valid element in the array or container
2961,2962,2963,2966,EXP33-CPP. Do not reference uninitialized memory
2967,2968,2971,2972,EXP33-CPP. Do not reference uninitialized memory
2973,2976, 2977, 2978EXP33-CPP. Do not reference uninitialized memory
2980,2981,2982,2983,MSC07-CPP. Detect and remove dead code
2982,2983,2984,2985,MSC13-CPP. Detect and remove unused values
2984,2985,2986,3099,MSC07-CPP. Detect and remove dead code
2986MSC13-CPP. Detect and remove unused values
3000,3001,3002,3003,3005,3006,3007,3010,3011,3012,3015,3016INT02-CPP. Understand integer conversion rules
3001STR07-CPP. Don't assume numeric values for expressions with type plain character
3003,3004INT13-CPP. Use bitwise operators only on unsigned operands
3010,3000,2850,2851,2852,2853,2855-2858,2890-2898,2900,2901,2901,2903,2905,2906,2907,2908INT31-CPP. Ensure that integer conversions do not result in lost or misinterpreted data
3011FLP33-CPP. Convert integers to floating point for floating point operations
3011FLP34-CPP. Ensure that floating point conversions are within range of the new type
3011FLP36-CPP. Beware of precision loss when converting integral types to floating point
3013INT36-CPP. Do not use out-of-range enumeration values
3017EXP11-CPP. Do not apply operators expecting one type to data of an incompatible type
3030EXP11-CPP. Do not apply operators expecting one type to data of an incompatible type
3033,3038EXP36-CPP. Do not convert pointers into more strictly aligned pointer types
3044,3045INT11-CPP. Take care when converting from pointer to integer or integer to pointer
3051STR34-CPP. Cast characters to unsigned types before converting to larger integer sizes
3058MSC02-CPP. Avoid errors of omission
3060,3083EXP35-CPP. Do not cast away a const qualification
3061EXP32-CPP. Do not access a volatile object through a non-volatile reference
3062EXP38-CPP. Do not modify constant values
3063,3064STR05-CPP. Use pointers to const when referring to string literals
3063,3064,3605,STR30-CPP. Do not attempt to modify string literals
3072,3073ARR39-CPP. Do not treat arrays polymorphically
3072,3073OOP33-CPP. Do not slice polymorphic objects
3076EXP13-CPP. Prefer dynamic_cast over static_cast over reinterpret_cast
3080,3082EXP05-CPP. Do not use C-style casts
3090EXP14-CPP. Do not use reinterpret_cast on pointers to class objects with multiple inheritence
3100,3101,3102,4017MSC07-CPP. Detect and remove dead code
use pointer-to-member operators to access nonexistent members
2811 OOP55-CPP. Do not use pointer-to-member operators to access nonexistent members
2812 EXP54-CPP. Do not access an object outside of its lifetime
2812 OOP55-CPP. Do not use pointer-to-member operators to access nonexistent members
2813 EXP54-CPP. Do not access an object outside of its lifetime
2813 OOP55-CPP. Do not use pointer-to-member operators to access nonexistent members
2814 EXP54-CPP. Do not access an object outside of its lifetime
2814 OOP55-CPP. Do not use pointer-to-member operators to access nonexistent members
2888 MSC54-CPP. A signal handler must be a plain old function
2891 CTR50-CPP. Guarantee that container indices and iterators are within the valid range
2930 EXP54-CPP. Do not access an object outside of its lifetime
2931 EXP54-CPP. Do not access an object outside of its lifetime
2932 EXP54-CPP. Do not access an object outside of its lifetime
2933 EXP54-CPP. Do not access an object outside of its lifetime
2934 EXP54-CPP. Do not access an object outside of its lifetime
2961 EXP53-CPP. Do not read uninitialized memory
2962 EXP53-CPP. Do not read uninitialized memory
2963 EXP53-CPP. Do not read uninitialized memory
2966 EXP53-CPP. Do not read uninitialized memory
2967 EXP53-CPP. Do not read uninitialized memory
2968 EXP53-CPP. Do not read uninitialized memory
2971 EXP53-CPP. Do not read uninitialized memory
2972 EXP53-CPP. Do not read uninitialized memory
2973 EXP53-CPP. Do not read uninitialized memory
2976 EXP53-CPP. Do not read uninitialized memory
2977 EXP53-CPP. Do not read uninitialized memory
2978 EXP53-CPP. Do not read uninitialized memory
3013 INT50-CPP. Do not cast to an out-of-range enumeration value
3033. 3038 EXP56-CPP. Do not call a function with a mismatched language linkage
3066 EXP55-CPP. Do not access a cv-qualified object through a cv-unqualified type
3072 OOP51-CPP. Do not slice derived objects
3073 CTR56-CPP. Do not use pointer arithmetic on polymorphic objects
3139 CTR50-CPP. Guarantee that container indices and iterators are within the valid range
3140 CTR50-CPP. Guarantee that container indices and iterators are within the valid range
3220 EXP50-CPP. Do not depend on the order of evaluation for side effects
3221 EXP50-CPP. Do not depend on the order of evaluation for side effects
3222 EXP50-CPP. Do not depend on the order of evaluation for side effects
3223 EXP50-CPP. Do not depend on the order of evaluation for side effects
3225 CTR58-CPP. Predicate function objects should not be mutable
3225 MEM52-CPP. Detect and handle memory allocation errors
3226 CTR58-CPP. Predicate function objects should not be mutable
3226 MEM52-CPP. Detect and handle memory allocation errors
3227 CTR58-CPP. Predicate function objects should not be mutable
3227 MEM52-CPP. Detect and handle memory allocation errors
3228 EXP503220,3221,3222,3223EXP10-CPP. Do not depend on the order of evaluation of subexpressions or the order in which for side effects take place3220,3221,3222,3223
3228 CTR58EXP30-CPP. Do not depend on order of evaluation between sequence points
3224ERR01-CPP. Use ferror() rather than errno to check for FILE stream errors
3230EXP02-CPP. Be aware of the short-circuit behavior of the logical AND and OR operators
3231EXP02-CPP. Be aware of the short-circuit behavior of the logical AND and OR operators
3240EXP06-CPP. Operands to the sizeof operator should not contain side effects
3242,3243,3244,MSC03-CPP. Avoid errors of addition
3244,3245MSC12-CPP. Detect and remove code that has no effect
3245,4060MSC03-CPP. Avoid errors of addition
3247,3248,3249,3250,MSC14-CPP. Do not introduce unnecessary platform dependencies
3270FLP35-CPP. Take granularity into account when comparing floating point values
3290EXP18-CPP. Prefer the prefix forms of ++ and --
3292EXP18-CPP. Prefer the prefix forms of ++ and --
3301OOP05-CPP. Avoid deleting this
3320,3400,3401MSC14-CPP. Do not introduce unnecessary platform dependencies
3330,3331,3332,3334,1530MEM39-CPP. Resources allocated by memory allocation functions must be released using the corresponding memory deallocation function
3332,3334,1530,3968MEM08-CPP. Use new and delete rather than raw memory allocation and deallocation
3337,3338,3339MEM11-CPP. Allocate and free memory in the same module, at the same level of abstraction
3337,3338,3339MEM31-CPP. Free dynamically allocated memory exactly once
3403OOP34-CPP. Ensure the proper destructor is called for polymorphic objects
3500,3505,3506,ERR08-CPP. Prefer special-purpose types for exceptions
3507,4033ERR08-CPP. Prefer special-purpose types for exceptions
3508ERR14-CPP. Do not allow an exception class's copy constructor to throw exceptions
3510ERR35-CPP. A handler in a constructor or destructor's function-try-block should not reference class data
3606,3607STR30-CPP. Do not attempt to modify string literals
3700,3702,3703EXP00-CPP. Use parentheses for precedence of operation
3700,3709EXP17-CPP. Treat relational and equality operators as if they were nonassociative
3705EXP08-CPP. Ensure pointer arithmetic is used correctly
3705,3706,3707ARR37-CPP. Do not add or subtract an integer to a pointer to a non-array object
3706EXP08-CPP. Ensure pointer arithmetic is used correctly
3708FLP02-CPP. Avoid using floating point numbers when precise computation is needed
3715,3716,3717INT07-CPP. Use only explicitly signed or unsigned char type for numeric values
3802EXP12-CPP. Do not ignore values returned by functions or methods
4011MSC18-CPP. Finish every set of statements associated with a case label with a break statement
4013,4014MSC20-CPP. Do not use a switch statement to transfer control into a complex block
4024, 4028, 4625,OOP35-CPP. Do not return references to private data
4031ERR09-CPP. Throw anonymous temporaries and catch by reference
4032,4631,4633,3509ERR33-CPP. Destructors must not throw exceptions
4037,4038,4636,4637ERR30-CPP. Try to recover gracefully from unexpected errors
4040,4034ERR36-CPP. Multiple catch handlers to a try block should order their exceptions from most derived to most basic
4053,4056,4058OOP37-CPP. Constructor initializers should be ordered correctly
4070MSC01-CPP. Strive for logical completeness
4071EXP19-CPP. Do not perform assignments in conditional expressions
4071MSC02-CPP. Avoid errors of omission
4072,4073,4075,4076MEM42-CPP. Ensure that copy assignment operators do not damage an object that is copied to itself
4075,4076ERR39-CPP. Guarantee exception safety
4090DCL03-CPP. Use a static assertion to test the value of a constant expression
4101, 4102, 4206, 4207, 4218,DCL19-CPP. Initialize automatic local variables on declaration
4107, 4108, 1808DCL04-CPP. Do not declare more than one variable per declaration
4213,4283DCL13-CPP. Declare function parameters that are pointers to values not changed by the function as const
4219, 4265, 4269, 4270, 4271, 4272DCL19-CPP. Initialize automatic local variables on declaration
4234FLP30-CPP. Do not use floating point variables as loop counters
424MEM02-CPP. Immediately cast the result of a memory allocation function call into a pointer to the allocated type
Predicate function objects should not be mutable
3228 MEM52-CPP. Detect and handle memory allocation errors
3229 CTR58-CPP. Predicate function objects should not be mutable
3229 MEM52-CPP. Detect and handle memory allocation errors
3230 CTR58-CPP. Predicate function objects should not be mutable
3231 CTR58-CPP. Predicate function objects should not be mutable
3232 CTR58-CPP. Predicate function objects should not be mutable
3233 CTR58-CPP. Predicate function objects should not be mutable
3234 CTR58-CPP. Predicate function objects should not be mutable
3240 EXP52-CPP. Do not rely on side effects in unevaluated operands
3241 EXP52-CPP. Do not rely on side effects in unevaluated operands
3337 MEM51-CPP. Properly deallocate dynamically allocated resources
3339 MEM51-CPP. Properly deallocate dynamically allocated resources
3402 OOP52-CPP. Do not delete a polymorphic object without a virtual destructor
3403 OOP52-CPP. Do not delete a polymorphic object without a virtual destructor
3404 OOP52-CPP. Do not delete a polymorphic object without a virtual destructor
3508 ERR60-CPP. Exception objects must be nothrow copy constructible
3510 ERR53-CPP. Do not reference base classes or class data members in a constructor or destructor function-try-block handler
3802 CTR53-CPP. Use valid iterator ranges
4003 EXP54-CPP. Do not access an object outside of its lifetime
4026 EXP54-CPP. Do not access an object outside of its lifetime
4030 ERR54-CPP. Catch handlers should order their parameter types from most derived to least derived
4031 ERR61-CPP. Catch exceptions by lvalue reference
4032 DCL58-CPP. Do not modify the standard namespaces
4035 DCL58-CPP. Do not modify the standard namespaces
4035 ERR51-CPP. Handle all exceptions
4035 ERR55-CPP. Honor exception specifications
4036 ERR51-CPP. Handle all exceptions
4036 ERR55-CPP. Honor exception specifications
4037 ERR51-CPP. Handle all exceptions
4053 OOP53-CPP. Write constructor member initializers in the canonical order
4072 OOP54-CPP. Gracefully handle self-copy assignment
4073 OOP54-CPP. Gracefully handle self-copy assignment
4075 ERR56-CPP. Guarantee exception safety
4075 OOP54-CPP. Gracefully handle self-copy assignment
4075 OOP58-CPP. Copy operations must not mutate the source object
4076 ERR56-CPP. Guarantee exception safety
4076 OOP54-CPP. Gracefully handle self-copy assignment
4260 OOP50-CPP. Do not invoke virtual functions from constructors or destructors
4261 OOP50-CPP. Do not invoke virtual functions from constructors or destructors
4262 MEM51-CPP. Properly deallocate dynamically allocated resources
4263 MEM51-CPP. Properly deallocate dynamically allocated resources
4264 MEM51-CPP. Properly deallocate dynamically allocated resources
4273 OOP50-CPP. Do not invoke virtual functions from constructors or destructors
4274 OOP50-CPP. Do not invoke virtual functions from constructors or destructors
4275 OOP50-CPP. Do not invoke virtual functions from constructors or destructors
4276 OOP50-CPP. Do not invoke virtual functions from constructors or destructors
4277 OOP50-CPP. Do not invoke virtual functions from constructors or destructors
4278 OOP50-CPP. Do not invoke virtual functions from constructors or destructors
4279 OOP504260,4261,4273,4274,OOP30-CPP. Do not invoke virtual functions from constructors or destructors 4275,4276,4277,4278,
4280 OOP50OOP30-CPP. Do not invoke virtual functions from constructors or destructors
4281 OOP50-CPP. Do not invoke virtual functions from constructors or destructors
4282 OOP504279,4280,4281,4282OOP30-CPP. Do not invoke virtual functions from constructors or destructors
4400,4401,4402,4403,4404,4405,4406,4408,4409,4414,4415DCL06-CPP. Use meaningful symbolic constants to represent literal values in program logic
4303 MEM50-CPP. Do not access freed memory
4304 MEM50-CPP. Do not access freed memory
4631 DCL584400,4401,4405EXP07-CPP. Do not diminish the benefits of constants by assuming their values in expressions
4610,4611MSC01-CPP. Strive for logical completeness
4626, 4627, 4628OOP35-CPP. Do not return references to private data
4647MSC35-CPP. Do not use goto statement to take control inside the try and catch blocks
Secondary AnalysisPRE04-CPP. Do not reuse a standard header file name
Secondary AnalysisPRE31-CPP. Avoid side-effects in arguments to unsafe macros
Secondary AnalysisDCL09-CPP. Declare functions that return errno with a return type of errno_t
Secondary AnalysisINT06-CPP. Use strtol() or a related function to convert a string token to an integer
Secondary AnalysisMEM00-CPP. Don't use auto_ptr where copy semantics might be expected
Secondary AnalysisERR34-CPP. Do not use longjmp
modify the standard namespaces
4632 MEM52-CPP. Detect and handle memory allocation errors
4632 ERR55-CPP. Honor exception specifications
4634 ERR58-CPP. Handle all exceptions thrown before main() begins executing
4636 ERR58-CPP. Handle all exceptions thrown before main() begins executing
4637 ERR58-CPP. Handle all exceptions thrown before main() begins executing
4639 ERR54-CPP. Catch handlers should order their parameter types from most derived to least derived
4639 ERR58-CPP. Handle all exceptions thrown before main() begins executing
4671 EXP55-CPP. Do not access a cv-qualified object through a cv-unqualified type
4961 CON50-CPP. Do not destroy a mutex while it is locked
4962 CON50-CPP. Do not destroy a mutex while it is locked
5003 DCL51-CPP. Do not declare or define a reserved identifier
5014 ERR50-CPP. Do not abruptly terminate the program
5015 ERR52-CPP. Do not use setjmp() or longjmp()
5017 OOP57-CPP. Prefer special member functions and overloaded operators to C Standard Library functions
5018 CON51-CPP. Ensure actively held locks are released on exceptional conditions
5019 CON54-CPP. Wrap functions that can spuriously wake up in a loop
5020 CON55-CPP. Preserve thread safety and liveness when using condition variables
5028 MSC50-CPP. Do not use std::rand() for generating pseudorandom numbers
5038 OOP57-CPP. Prefer special member functions and overloaded operators to C Standard Library warncallPRE09-CPP. Do not replace secure functions with less secure functions