[{"data":1,"prerenderedAt":2214},["ShallowReactive",2],{"global-navigation":3,"page-\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fdeclarations-and-initialization-dcl\u002Fdcl50-cpp":28,"surround-\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fdeclarations-and-initialization-dcl\u002Fdcl50-cpp":1519,"sidebar-sei-cert-cpp-coding-standard":1527},[4,8],{"title":5,"path":6,"_path":6,"fromAppConfig":7},"Home","\u002F",true,{"title":9,"path":10,"children":11,"_path":27,"fromAppConfig":7},"Coding Standards","\u002Fcoding-standards\u002F",[12,15,18,21,24],{"title":13,"path":14},"Android Coding Standard","\u002Fandroid-secure-coding-standard\u002F",{"title":16,"path":17},"C Coding Standard","\u002Fsei-cert-c-coding-standard\u002F",{"title":19,"path":20},"C++ Coding Standard","\u002Fsei-cert-cpp-coding-standard\u002F",{"title":22,"path":23},"Java Coding Standard","\u002Fsei-cert-oracle-coding-standard-for-java\u002F",{"title":25,"path":26},"Perl Coding Standard","\u002Fsei-cert-perl-coding-standard\u002F","\u002Fcoding-standards",{"id":29,"title":30,"body":31,"description":1505,"extension":1506,"meta":1507,"navigation":7,"path":1515,"seo":1516,"stem":1517,"__hash__":1518},"content\u002F5.sei-cert-cpp-coding-standard\u002F3.rules\u002F05.declarations-and-initialization-dcl\u002F02.dcl50-cpp.md","DCL50-CPP. Do not define a C-style variadic function",{"type":32,"value":33,"toc":1495},"minimark",[34,38,47,65,68,80,83,97,265,270,285,509,516,520,526,688,692,699,714,938,981,985,993,1060,1064,1423,1428,1442,1446,1468,1471,1491],[35,36,30],"h1",{"id":37},"dcl50-cpp-do-not-define-a-c-style-variadic-function",[39,40,41,42,46],"p",{},"Functions can be defined to accept more formal arguments at the call site than are specified by the parameter declaration clause. Such functions are called ",[43,44,45],"em",{},"variadic"," functions because they can accept a variable number of arguments from a caller. C++ provides two mechanisms by which a variadic function can be defined: function parameter packs and use of a C-style ellipsis as the final parameter declaration.",[39,48,49,50,53,54,59,60,64],{},"Variadic functions are flexible because they accept a varying number of arguments of differing types. However, they can also be hazardous. A variadic function using a C-style ellipsis (hereafter called a ",[43,51,52],{},"C-style variadic function"," ) has no mechanisms to check the type safety of arguments being passed to the function or to check that the number of arguments being passed matches the semantics of the function definition. Consequently, a runtime call to a C-style variadic function that passes inappropriate arguments yields undefined behavior. Such ",[55,56,58],"a",{"href":57},"\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fbb-definitions#BB.Definitions-undefinedbehavior","undefined behavior"," could be ",[55,61,63],{"href":62},"\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fbb-definitions#BB.Definitions-exploit","exploited"," to run arbitrary code.",[39,66,67],{},"Do not define C-style variadic functions. (The declaration of a C-style variadic function that is never defined is permitted, as it is not harmful and can be useful in unevaluated contexts.)",[39,69,70,71,75,76,79],{},"Issues with C-style variadic functions can be avoided by using variadic functions defined with function parameter packs for situations in which a variable number of arguments should be passed to a function. Additionally, function currying can be used as a replacement to variadic functions. For example, in contrast to C's ",[72,73,74],"code",{},"printf()"," family of functions, C++ output is implemented with the overloaded single-argument ",[72,77,78],{},"std::cout::operator\u003C\u003C()"," operators.",[39,81,82],{},"Noncompliant Code Example",[39,84,85,86,89,90,92,93,96],{},"This noncompliant code example uses a C-style variadic function to add a series of integers together. The function reads arguments until the value ",[72,87,88],{},"0"," is found. Calling this function without passing the value ",[72,91,88],{}," as an argument (after the first two arguments) results in undefined behavior. Furthermore, passing any type other than an ",[72,94,95],{},"int"," also results in undefined behavior.",[98,99,101],"code-block",{"quality":100},"bad",[102,103,108],"pre",{"className":104,"code":105,"language":106,"meta":107,"style":107},"language-cpp shiki shiki-themes github-light github-dark monokai","#include \u003Ccstdarg>\n\nint add(int first, int second, ...) {\n  int r = first + second;  \n  va_list va;\n  va_start(va, second);\n  while (int v = va_arg(va, int)) {\n    r += v;\n  }\n  va_end(va);\n  return r;\n}\n","cpp","",[72,109,110,123,129,160,181,187,196,223,235,241,250,259],{"__ignoreMap":107},[111,112,115,119],"span",{"class":113,"line":114},"line",1,[111,116,118],{"class":117},"sC2Qs","#include",[111,120,122],{"class":121},"sstjo"," \u003Ccstdarg>\n",[111,124,126],{"class":113,"line":125},2,[111,127,128],{"emptyLinePlaceholder":7},"\n",[111,130,132,135,139,143,145,149,152,154,157],{"class":113,"line":131},3,[111,133,95],{"class":134},"sq6CD",[111,136,138],{"class":137},"srTi1"," add",[111,140,142],{"class":141},"sMOD_","(",[111,144,95],{"class":134},[111,146,148],{"class":147},"sTHNf"," first",[111,150,151],{"class":141},", ",[111,153,95],{"class":134},[111,155,156],{"class":147}," second",[111,158,159],{"class":141},", ...) {\n",[111,161,163,166,169,172,175,178],{"class":113,"line":162},4,[111,164,165],{"class":134},"  int",[111,167,168],{"class":141}," r ",[111,170,171],{"class":117},"=",[111,173,174],{"class":141}," first ",[111,176,177],{"class":117},"+",[111,179,180],{"class":141}," second;  \n",[111,182,184],{"class":113,"line":183},5,[111,185,186],{"class":141},"  va_list va;\n",[111,188,190,193],{"class":113,"line":189},6,[111,191,192],{"class":137},"  va_start",[111,194,195],{"class":141},"(va, second);\n",[111,197,199,202,205,207,210,212,215,218,220],{"class":113,"line":198},7,[111,200,201],{"class":117},"  while",[111,203,204],{"class":141}," (",[111,206,95],{"class":134},[111,208,209],{"class":141}," v ",[111,211,171],{"class":117},[111,213,214],{"class":137}," va_arg",[111,216,217],{"class":141},"(va, ",[111,219,95],{"class":134},[111,221,222],{"class":141},")) {\n",[111,224,226,229,232],{"class":113,"line":225},8,[111,227,228],{"class":141},"    r ",[111,230,231],{"class":117},"+=",[111,233,234],{"class":141}," v;\n",[111,236,238],{"class":113,"line":237},9,[111,239,240],{"class":141},"  }\n",[111,242,244,247],{"class":113,"line":243},10,[111,245,246],{"class":137},"  va_end",[111,248,249],{"class":141},"(va);\n",[111,251,253,256],{"class":113,"line":252},11,[111,254,255],{"class":117},"  return",[111,257,258],{"class":141}," r;\n",[111,260,262],{"class":113,"line":261},12,[111,263,264],{"class":141},"}\n",[266,267,269],"h2",{"id":268},"compliant-solution-recursive-pack-expansion","Compliant Solution (Recursive Pack Expansion)",[39,271,272,273,276,277,279,280,284],{},"In this compliant solution, a variadic function using a function parameter pack is used to implement the ",[72,274,275],{},"add()"," function, allowing identical behavior for call sites. Unlike the C-style variadic function used in the noncompliant code example, this compliant solution does not result in undefined behavior if the list of parameters is not terminated with ",[72,278,88],{}," . Additionally, if any of the values passed to the function are not integers, the code is ",[55,281,283],{"href":282},"\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fbb-definitions#BB.Definitions-ill-formed","ill-formed"," rather than producing undefined behavior.",[98,286,288],{"quality":287},"good",[102,289,291],{"className":104,"code":290,"language":106,"meta":107,"style":107},"#include \u003Ctype_traits>\n \ntemplate \u003Ctypename Arg, typename std::enable_if\u003Cstd::is_integral\u003CArg>::value>::type * = nullptr>\nint add(Arg f, Arg s) { return f + s; }\n \ntemplate \u003Ctypename Arg, typename... Ts, typename std::enable_if\u003Cstd::is_integral\u003CArg>::value>::type * = nullptr>\nint add(Arg f, Ts... rest) {\n  return f + add(rest...);\n}\n",[72,292,293,300,305,372,406,410,468,492,505],{"__ignoreMap":107},[111,294,295,297],{"class":113,"line":114},[111,296,118],{"class":117},[111,298,299],{"class":121}," \u003Ctype_traits>\n",[111,301,302],{"class":113,"line":125},[111,303,304],{"class":141}," \n",[111,306,307,310,313,316,320,322,324,327,330,333,336,339,341,344,346,349,352,355,357,360,363,366,369],{"class":113,"line":131},[111,308,309],{"class":134},"template",[111,311,312],{"class":141}," \u003C",[111,314,315],{"class":134},"typename",[111,317,319],{"class":318},"sz2Vg"," Arg",[111,321,151],{"class":141},[111,323,315],{"class":117},[111,325,326],{"class":318}," std",[111,328,329],{"class":141},"::",[111,331,332],{"class":318},"enable_if",[111,334,335],{"class":141},"\u003C",[111,337,338],{"class":318},"std",[111,340,329],{"class":141},[111,342,343],{"class":318},"is_integral",[111,345,335],{"class":141},[111,347,348],{"class":318},"Arg",[111,350,351],{"class":141},">::",[111,353,354],{"class":318},"value",[111,356,351],{"class":141},[111,358,359],{"class":318},"type",[111,361,362],{"class":117}," *",[111,364,365],{"class":117}," =",[111,367,368],{"class":134}," nullptr",[111,370,371],{"class":141},">\n",[111,373,374,376,378,380,382,385,387,389,392,395,398,401,403],{"class":113,"line":162},[111,375,95],{"class":134},[111,377,138],{"class":137},[111,379,142],{"class":141},[111,381,348],{"class":318},[111,383,384],{"class":147}," f",[111,386,151],{"class":141},[111,388,348],{"class":318},[111,390,391],{"class":147}," s",[111,393,394],{"class":141},") { ",[111,396,397],{"class":117},"return",[111,399,400],{"class":141}," f ",[111,402,177],{"class":117},[111,404,405],{"class":141}," s; }\n",[111,407,408],{"class":113,"line":183},[111,409,304],{"class":141},[111,411,412,414,416,418,420,422,424,427,430,432,434,436,438,440,442,444,446,448,450,452,454,456,458,460,462,464,466],{"class":113,"line":189},[111,413,309],{"class":134},[111,415,312],{"class":141},[111,417,315],{"class":134},[111,419,319],{"class":318},[111,421,151],{"class":141},[111,423,315],{"class":134},[111,425,426],{"class":141},"... ",[111,428,429],{"class":318},"Ts",[111,431,151],{"class":141},[111,433,315],{"class":117},[111,435,326],{"class":318},[111,437,329],{"class":141},[111,439,332],{"class":318},[111,441,335],{"class":141},[111,443,338],{"class":318},[111,445,329],{"class":141},[111,447,343],{"class":318},[111,449,335],{"class":141},[111,451,348],{"class":318},[111,453,351],{"class":141},[111,455,354],{"class":318},[111,457,351],{"class":141},[111,459,359],{"class":318},[111,461,362],{"class":117},[111,463,365],{"class":117},[111,465,368],{"class":134},[111,467,371],{"class":141},[111,469,470,472,474,476,478,480,482,484,486,489],{"class":113,"line":198},[111,471,95],{"class":134},[111,473,138],{"class":137},[111,475,142],{"class":141},[111,477,348],{"class":318},[111,479,384],{"class":147},[111,481,151],{"class":141},[111,483,429],{"class":318},[111,485,426],{"class":141},[111,487,488],{"class":147},"rest",[111,490,491],{"class":141},") {\n",[111,493,494,496,498,500,502],{"class":113,"line":225},[111,495,255],{"class":117},[111,497,400],{"class":141},[111,499,177],{"class":117},[111,501,138],{"class":137},[111,503,504],{"class":141},"(rest...);\n",[111,506,507],{"class":113,"line":237},[111,508,264],{"class":141},[39,510,511,512,515],{},"This compliant solution makes use of ",[72,513,514],{},"std::enable_if"," to ensure that any nonintegral argument value results in an ill-formed program.",[266,517,519],{"id":518},"compliant-solution-braced-initializer-list-expansion","Compliant Solution (Braced Initializer List Expansion)",[39,521,522,523,525],{},"An alternative compliant solution that does not require recursive expansion of the function parameter pack instead expands the function parameter pack into a list of values as part of a braced initializer list. Since narrowing conversions are not allowed in a braced initializer list, the type safety is preserved despite the ",[72,524,514],{}," not involving any of the variadic arguments.",[98,527,528],{"quality":287},[102,529,531],{"className":104,"code":530,"language":106,"meta":107,"style":107},"#include \u003Ctype_traits>\n \ntemplate \u003Ctypename Arg, typename... Ts, typename std::enable_if\u003Cstd::is_integral\u003CArg>::value>::type * = nullptr>\nint add(Arg i, Arg j, Ts... all) {\n  int values[] = { j, all... };\n  int r = i;\n  for (auto v : values) {\n    r += v;\n  }\n  return r;\n}\n",[72,532,533,539,543,599,630,642,653,666,674,678,684],{"__ignoreMap":107},[111,534,535,537],{"class":113,"line":114},[111,536,118],{"class":117},[111,538,299],{"class":121},[111,540,541],{"class":113,"line":125},[111,542,304],{"class":141},[111,544,545,547,549,551,553,555,557,559,561,563,565,567,569,571,573,575,577,579,581,583,585,587,589,591,593,595,597],{"class":113,"line":131},[111,546,309],{"class":134},[111,548,312],{"class":141},[111,550,315],{"class":134},[111,552,319],{"class":318},[111,554,151],{"class":141},[111,556,315],{"class":134},[111,558,426],{"class":141},[111,560,429],{"class":318},[111,562,151],{"class":141},[111,564,315],{"class":117},[111,566,326],{"class":318},[111,568,329],{"class":141},[111,570,332],{"class":318},[111,572,335],{"class":141},[111,574,338],{"class":318},[111,576,329],{"class":141},[111,578,343],{"class":318},[111,580,335],{"class":141},[111,582,348],{"class":318},[111,584,351],{"class":141},[111,586,354],{"class":318},[111,588,351],{"class":141},[111,590,359],{"class":318},[111,592,362],{"class":117},[111,594,365],{"class":117},[111,596,368],{"class":134},[111,598,371],{"class":141},[111,600,601,603,605,607,609,612,614,616,619,621,623,625,628],{"class":113,"line":162},[111,602,95],{"class":134},[111,604,138],{"class":137},[111,606,142],{"class":141},[111,608,348],{"class":318},[111,610,611],{"class":147}," i",[111,613,151],{"class":141},[111,615,348],{"class":318},[111,617,618],{"class":147}," j",[111,620,151],{"class":141},[111,622,429],{"class":318},[111,624,426],{"class":141},[111,626,627],{"class":147},"all",[111,629,491],{"class":141},[111,631,632,634,637,639],{"class":113,"line":183},[111,633,165],{"class":134},[111,635,636],{"class":141}," values[] ",[111,638,171],{"class":117},[111,640,641],{"class":141}," { j, all... };\n",[111,643,644,646,648,650],{"class":113,"line":189},[111,645,165],{"class":134},[111,647,168],{"class":141},[111,649,171],{"class":117},[111,651,652],{"class":141}," i;\n",[111,654,655,658,660,663],{"class":113,"line":198},[111,656,657],{"class":117},"  for",[111,659,204],{"class":141},[111,661,662],{"class":134},"auto",[111,664,665],{"class":141}," v : values) {\n",[111,667,668,670,672],{"class":113,"line":225},[111,669,228],{"class":141},[111,671,231],{"class":117},[111,673,234],{"class":141},[111,675,676],{"class":113,"line":237},[111,677,240],{"class":141},[111,679,680,682],{"class":113,"line":243},[111,681,255],{"class":117},[111,683,258],{"class":141},[111,685,686],{"class":113,"line":252},[111,687,264],{"class":141},[266,689,691],{"id":690},"exceptions","Exceptions",[39,693,694,698],{},[695,696,697],"strong",{},"DCL50-CPP-EX1:"," It is permissible to define a C-style variadic function if that function also has external C language linkage. For instance, the function may be a definition used in a C library API that is implemented in C++.",[39,700,701,704,705,708,709,713],{},[695,702,703],{},"DCL50-CPP-EX2"," : As stated in the normative text, C-style variadic functions that are declared but never defined are permitted. For example, when a function call expression appears in an unevaluated context, such as the argument in a ",[72,706,707],{},"sizeof"," expression, overload resolution is performed to determine the result type of the call but does not require a function definition. Some template metaprogramming techniques that employ ",[55,710,712],{"href":711},"\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fbb-definitions#BB.Definitions-SFINAE","SFINAE"," use variadic function declarations to implement compile-time type queries, as in the following example.",[98,715,716],{"quality":287},[102,717,719],{"className":104,"code":718,"language":106,"meta":107,"style":107},"template \u003Ctypename Ty>\nclass has_foo_function {\n  typedef char yes[1];\n  typedef char no[2];\n\n  template \u003Ctypename Inner>\n  static yes& test(Inner *I, decltype(I->foo()) * = nullptr); \u002F\u002F Function is never defined.\n\n  template \u003Ctypename>\n  static no& test(...); \u002F\u002F Function is never defined.\n\npublic:\n  static const bool value = sizeof(test\u003CTy>(nullptr)) == sizeof(yes);\n};\n",[72,720,721,734,745,763,777,781,795,847,851,861,877,881,886,932],{"__ignoreMap":107},[111,722,723,725,727,729,732],{"class":113,"line":114},[111,724,309],{"class":134},[111,726,312],{"class":141},[111,728,315],{"class":134},[111,730,731],{"class":318}," Ty",[111,733,371],{"class":141},[111,735,736,739,742],{"class":113,"line":125},[111,737,738],{"class":134},"class",[111,740,741],{"class":318}," has_foo_function",[111,743,744],{"class":141}," {\n",[111,746,747,750,753,756,760],{"class":113,"line":131},[111,748,749],{"class":117},"  typedef",[111,751,752],{"class":134}," char",[111,754,755],{"class":141}," yes[",[111,757,759],{"class":758},"s7F3e","1",[111,761,762],{"class":141},"];\n",[111,764,765,767,769,772,775],{"class":113,"line":162},[111,766,749],{"class":117},[111,768,752],{"class":134},[111,770,771],{"class":141}," no[",[111,773,774],{"class":758},"2",[111,776,762],{"class":141},[111,778,779],{"class":113,"line":183},[111,780,128],{"emptyLinePlaceholder":7},[111,782,783,786,788,790,793],{"class":113,"line":189},[111,784,785],{"class":134},"  template",[111,787,312],{"class":141},[111,789,315],{"class":134},[111,791,792],{"class":318}," Inner",[111,794,371],{"class":141},[111,796,797,800,803,806,809,811,814,816,819,821,824,827,830,833,836,838,840,843],{"class":113,"line":198},[111,798,799],{"class":117},"  static",[111,801,802],{"class":318}," yes",[111,804,805],{"class":117},"&",[111,807,808],{"class":137}," test",[111,810,142],{"class":141},[111,812,813],{"class":318},"Inner",[111,815,362],{"class":117},[111,817,818],{"class":147},"I",[111,820,151],{"class":141},[111,822,823],{"class":134},"decltype",[111,825,826],{"class":141},"(I->",[111,828,829],{"class":137},"foo",[111,831,832],{"class":141},"()) ",[111,834,835],{"class":117},"*",[111,837,365],{"class":117},[111,839,368],{"class":758},[111,841,842],{"class":141},");",[111,844,846],{"class":845},"s8-w5"," \u002F\u002F Function is never defined.\n",[111,848,849],{"class":113,"line":225},[111,850,128],{"emptyLinePlaceholder":7},[111,852,853,855,857,859],{"class":113,"line":237},[111,854,785],{"class":134},[111,856,312],{"class":141},[111,858,315],{"class":134},[111,860,371],{"class":141},[111,862,863,865,868,870,872,875],{"class":113,"line":243},[111,864,799],{"class":117},[111,866,867],{"class":318}," no",[111,869,805],{"class":117},[111,871,808],{"class":137},[111,873,874],{"class":141},"(...);",[111,876,846],{"class":845},[111,878,879],{"class":113,"line":252},[111,880,128],{"emptyLinePlaceholder":7},[111,882,883],{"class":113,"line":261},[111,884,885],{"class":134},"public:\n",[111,887,889,891,894,897,900,902,905,907,910,912,915,918,921,924,927,929],{"class":113,"line":888},13,[111,890,799],{"class":117},[111,892,893],{"class":117}," const",[111,895,896],{"class":134}," bool",[111,898,899],{"class":141}," value ",[111,901,171],{"class":117},[111,903,904],{"class":117}," sizeof",[111,906,142],{"class":141},[111,908,909],{"class":137},"test",[111,911,335],{"class":141},[111,913,914],{"class":318},"Ty",[111,916,917],{"class":141},">(",[111,919,920],{"class":758},"nullptr",[111,922,923],{"class":141},")) ",[111,925,926],{"class":117},"==",[111,928,904],{"class":117},[111,930,931],{"class":141},"(yes);\n",[111,933,935],{"class":113,"line":934},14,[111,936,937],{"class":141},"};\n",[39,939,940,941,943,944,947,948,951,952,954,955,957,958,961,962,964,965,968,969,971,972,974,975,977,978,980],{},"In this example, the value of ",[72,942,354],{}," is determined on the basis of which overload of ",[72,945,946],{},"test()"," is selected. The declaration of ",[72,949,950],{},"  Inner *I "," allows use of the variable ",[72,953,818],{}," within the ",[72,956,823],{}," specifier, which results in a pointer of some (possibly ",[72,959,960],{},"void"," ) type, with a default value of ",[72,963,920],{}," . However, if there is no declaration of ",[72,966,967],{},"Inner::foo()"," , the ",[72,970,823],{}," specifier will be ill-formed, and that variant of ",[72,973,946],{}," will not be a candidate function for overload resolution due to SFINAE. The result is that the C-style variadic function variant of ",[72,976,946],{}," will be the only function in the candidate set. Both ",[72,979,946],{}," functions are declared but never defined because their definitions are not required for use within an unevaluated expression context.",[266,982,984],{"id":983},"risk-assessment","Risk Assessment",[39,986,987,988,992],{},"Incorrectly using a variadic function can result in ",[55,989,991],{"href":990},"\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fbb-definitions#BB.Definitions-abnormaltermination","abnormal program termination"," , unintended information disclosure, or execution of arbitrary code.",[994,995,996,997,996,1027],"table",{},"\n  ",[998,999,1000,1001,996],"thead",{},"\n    ",[1002,1003,1004,1005,1004,1009,1004,1012,1004,1015,1004,1018,1004,1021,1004,1024,1000],"tr",{},"\n      ",[1006,1007,1008],"th",{},"Rule",[1006,1010,1011],{},"Severity",[1006,1013,1014],{},"Likelihood",[1006,1016,1017],{},"Detectable",[1006,1019,1020],{},"Repairable",[1006,1022,1023],{},"Priority",[1006,1025,1026],{},"Level",[1028,1029,1000,1030,996],"tbody",{},[1002,1031,1004,1032,1004,1036,1004,1039,1004,1042,1004,1045,1004,1048,1004,1055,1000],{},[1033,1034,1035],"td",{},"DCL50-CPP",[1033,1037,1038],{},"High",[1033,1040,1041],{},"Probable",[1033,1043,1044],{},"Yes",[1033,1046,1047],{},"No",[1033,1049,1051],{"style":1050},"color: #e74c3c;",[1052,1053,1054],"b",{},"P12",[1033,1056,1057],{"style":1050},[1052,1058,1059],{},"L1",[266,1061,1063],{"id":1062},"automated-detection","Automated Detection",[994,1065,1068,1094],{"className":1066},[1067],"wrapped",[998,1069,1070],{},[1002,1071,1074,1079,1084,1089],{"className":1072},[1073],"header",[1006,1075,1076],{},[39,1077,1078],{},"Tool",[1006,1080,1081],{},[39,1082,1083],{},"Version",[1006,1085,1086],{},[39,1087,1088],{},"Checker",[1006,1090,1091],{},[39,1092,1093],{},"Description",[1028,1095,1096,1127,1154,1181,1216,1242,1267,1299,1323,1349,1371,1396],{},[1002,1097,1100,1106,1116,1124],{"className":1098},[1099],"odd",[1033,1101,1102],{},[55,1103,1105],{"href":1104},"\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fastree","Astrée",[1033,1107,1108],{},[1109,1110,1113],"div",{"className":1111},[1112],"content-wrapper",[39,1114,1115],{},"25.10",[1033,1117,1118],{},[695,1119,1120,1121],{},"function-ellipsis",[1122,1123],"br",{},[1033,1125,1126],{},"Fully checked",[1002,1128,1131,1137,1145,1150],{"className":1129},[1130],"even",[1033,1132,1133],{},[55,1134,1136],{"href":1135},"\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Faxivion-bauhaus-suite","Axivion Bauhaus Suite",[1033,1138,1139],{},[1109,1140,1142],{"className":1141},[1112],[39,1143,1144],{},"7.2.0",[1033,1146,1147],{},[695,1148,1149],{},"CertC++-DCL50",[1033,1151,1152],{},[1122,1153],{},[1002,1155,1157,1163,1169,1174],{"className":1156},[1099],[1033,1158,1159],{},[55,1160,1162],{"href":1161},"\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fclang","Clang",[1033,1164,1165],{},[1109,1166,1168],{"className":1167},[1112],"3.9",[1033,1170,1171],{},[72,1172,1173],{},"      cert-dcl50-cpp     ",[1033,1175,1176,1177,1180],{},"Checked by ",[72,1178,1179],{},"      clang-tidy     "," .",[1002,1182,1184,1190,1196,1207],{"className":1183},[1130],[1033,1185,1186],{},[55,1187,1189],{"href":1188},"\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fcodesonar","CodeSonar",[1033,1191,1192],{},[1109,1193,1195],{"className":1194},[1112],"9.1p0",[1033,1197,1198,1203],{},[39,1199,1200],{},[695,1201,1202],{},"LANG.STRUCT.ELLIPSIS",[39,1204,1205],{},[695,1206],{},[1033,1208,1209],{},[39,1210,1211,1212,1214],{},"Ellipsis",[1122,1213],{},[1122,1215],{},[1002,1217,1219,1225,1233,1238],{"className":1218},[1099],[1033,1220,1221],{},[55,1222,1224],{"href":1223},"\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fhelix-qac","Helix QAC",[1033,1226,1227],{},[1109,1228,1230],{"className":1229},[1112],[39,1231,1232],{},"2025.2",[1033,1234,1235],{},[695,1236,1237],{},"C++2012, C++2625",[1033,1239,1240],{},[1122,1241],{},[1002,1243,1245,1251,1256,1263],{"className":1244},[1130],[1033,1246,1247],{},[55,1248,1250],{"href":1249},"\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fklocwork","Klocwork",[1033,1252,1253],{},[1109,1254,1232],{"className":1255},[1112],[1033,1257,1258],{},[39,1259,1260],{},[695,1261,1262],{},"MISRA.FUNC.VARARG",[1033,1264,1265],{},[1122,1266],{},[1002,1268,1270,1276,1282,1294],{"className":1269},[1099],[1033,1271,1272],{},[55,1273,1275],{"href":1274},"\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fldra","LDRA tool suite",[1033,1277,1278],{},[1109,1279,1281],{"className":1280},[1112],"9.7.1",[1033,1283,1284],{},[39,1285,1286,1289,1290],{},[695,1287,1288],{},"41 S"," ",[695,1291,1292],{},[1122,1293],{},[1033,1295,1296],{},[39,1297,1298],{},"Fully Implemented",[1002,1300,1302,1308,1313,1318],{"className":1301},[1130],[1033,1303,1304],{},[55,1305,1307],{"href":1306},"\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fparasoft","Parasoft C\u002FC++test",[1033,1309,1310],{},[1109,1311,1232],{"className":1312},[1112],[1033,1314,1315],{},[695,1316,1317],{},"CERT_CPP-DCL50-a",[1033,1319,1320],{},[39,1321,1322],{},"Functions shall not be defined with a variable number of arguments",[1002,1324,1326,1332,1340,1346],{"className":1325},[1099],[1033,1327,1328],{},[55,1329,1331],{"href":1330},"\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fpolyspace-bug-finder","Polyspace Bug Finder",[1033,1333,1334],{},[1109,1335,1337],{"className":1336},[1112],[39,1338,1339],{},"R2025b",[1033,1341,1342],{},[55,1343,1345],{"href":1344},"https:\u002F\u002Fwww.mathworks.com\u002Fhelp\u002Fbugfinder\u002Fref\u002Fcertcdcl50cpp.html","CERT C++: DCL50-CPP",[1033,1347,1348],{},"Checks for function definition with ellipsis notation (rule fully covered)",[1002,1350,1352,1358,1363,1369],{"className":1351},[1130],[1033,1353,1354],{},[55,1355,1357],{"href":1356},"\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Frulechecker","RuleChecker",[1033,1359,1360],{},[1109,1361,1115],{"className":1362},[1112],[1033,1364,1365],{},[695,1366,1120,1367],{},[1122,1368],{},[1033,1370,1126],{},[1002,1372,1374,1380,1388,1393],{"className":1373},[1099],[1033,1375,1376],{},[55,1377,1379],{"href":1378},"\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fsecurity-reviewer-static-reviewer","Security Reviewer - Static Reviewer",[1033,1381,1382],{},[1109,1383,1385],{"className":1384},[1112],[39,1386,1387],{},"6.02",[1033,1389,1390],{},[695,1391,1392],{},"UNSAFE_09",[1033,1394,1395],{},"Fully implemented",[1002,1397,1399,1405,1411,1419],{"className":1398},[1130],[1033,1400,1401],{},[55,1402,1404],{"href":1403},"\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fsonarqube-ccpp-plugin","SonarQube C\u002FC++ Plugin",[1033,1406,1407],{},[1109,1408,1410],{"className":1409},[1112],"4.10",[1033,1412,1413],{},[695,1414,1415],{},[55,1416,1418],{"href":1417},"https:\u002F\u002Fwww.sonarsource.com\u002Fproducts\u002Fcodeanalyzers\u002Fsonarcfamilyforcpp\u002Frules-cpp.html#RSPEC-923","FunctionEllipsis",[1033,1420,1421],{},[1122,1422],{},[1424,1425,1427],"h3",{"id":1426},"related-vulnerabilities","Related Vulnerabilities",[39,1429,1430,1431,1435,1436,1180],{},"Search for other ",[55,1432,1434],{"href":1433},"\u002Fsei-cert-c-coding-standard\u002Fback-matter\u002Fbb-definitions#BB.Definitions-vulnerability","vulnerabilities"," resulting from the violation of this rule on the ",[55,1437,1441],{"href":1438,"rel":1439},"https:\u002F\u002Fwww.kb.cert.org\u002Fvulnotes\u002Fbymetric?searchview&query=FIELD+KEYWORDS+contains+DCL31-CPP",[1440],"nofollow","CERT website",[266,1443,1445],{"id":1444},"bibliography","Bibliography",[994,1447,1449],{"className":1448},[1067],[1028,1450,1451],{},[1002,1452,1454,1462],{"className":1453},[1099],[1033,1455,1456,1457,1461],{},"[ ",[55,1458,1460],{"href":1459},"\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Faa-bibliography#AA.Bibliography-ISO\u002FIEC14882-2014","ISO\u002FIEC 14882-2014"," ]",[1033,1463,1464,1465,1467],{},"Subclause 5.2.2, \"Function Call\"",[1122,1466],{},"\nSubclause 14.5.3, \"Variadic Templates\"",[1469,1470],"hr",{},[39,1472,1473,1289,1480,1289,1485],{},[55,1474,1476],{"href":1475},"\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fdeclarations-and-initialization-dcl\u002F",[1477,1478],"img",{"src":1479},"\u002Fattachments\u002F88046682\u002F88480621.png",[55,1481,1482],{"href":1475},[1477,1483],{"src":1484},"\u002Fattachments\u002F88046682\u002F88475556.png",[55,1486,1488],{"href":1487},"\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fdeclarations-and-initialization-dcl\u002Fdcl51-cpp",[1477,1489],{"src":1490},"\u002Fattachments\u002F88046682\u002F88475555.png",[1492,1493,1494],"style",{},"html pre.shiki code .sC2Qs, html code.shiki .sC2Qs{--shiki-default:#D73A49;--shiki-dark:#F97583;--shiki-sepia:#F92672}html pre.shiki code .sstjo, html code.shiki .sstjo{--shiki-default:#032F62;--shiki-dark:#9ECBFF;--shiki-sepia:#E6DB74}html pre.shiki code .sq6CD, html code.shiki .sq6CD{--shiki-default:#D73A49;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit;--shiki-sepia:#66D9EF;--shiki-sepia-font-style:italic}html pre.shiki code .srTi1, html code.shiki .srTi1{--shiki-default:#6F42C1;--shiki-dark:#B392F0;--shiki-sepia:#A6E22E}html pre.shiki code .sMOD_, html code.shiki .sMOD_{--shiki-default:#24292E;--shiki-dark:#E1E4E8;--shiki-sepia:#F8F8F2}html pre.shiki code .sTHNf, html code.shiki .sTHNf{--shiki-default:#E36209;--shiki-default-font-style:inherit;--shiki-dark:#FFAB70;--shiki-dark-font-style:inherit;--shiki-sepia:#FD971F;--shiki-sepia-font-style:italic}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html .sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}html.sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}html pre.shiki code .sz2Vg, html code.shiki .sz2Vg{--shiki-default:#6F42C1;--shiki-default-text-decoration:inherit;--shiki-dark:#B392F0;--shiki-dark-text-decoration:inherit;--shiki-sepia:#A6E22E;--shiki-sepia-text-decoration:underline}html pre.shiki code .s7F3e, html code.shiki .s7F3e{--shiki-default:#005CC5;--shiki-dark:#79B8FF;--shiki-sepia:#AE81FF}html pre.shiki code .s8-w5, html code.shiki .s8-w5{--shiki-default:#6A737D;--shiki-dark:#6A737D;--shiki-sepia:#88846F}",{"title":107,"searchDepth":125,"depth":125,"links":1496},[1497,1498,1499,1500,1501,1504],{"id":268,"depth":125,"text":269},{"id":518,"depth":125,"text":519},{"id":690,"depth":125,"text":691},{"id":983,"depth":125,"text":984},{"id":1062,"depth":125,"text":1063,"children":1502},[1503],{"id":1426,"depth":131,"text":1427},{"id":1444,"depth":125,"text":1445},"Functions can be defined to accept more formal arguments at the call site than are specified by the parameter declaration clause. Such functions are called variadic functions because they can accept a variable number of arguments from a caller. C++ provides two mechanisms by which a variadic function can be defined: function parameter packs and use of a C-style ellipsis as the final parameter declaration.","md",{"tags":1508},[1509,1510,1511,1512,1513,1514],"review","dcl","ptc","review-dms","rule","review-ajb","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fdeclarations-and-initialization-dcl\u002Fdcl50-cpp",{"title":30,"description":1505},"5.sei-cert-cpp-coding-standard\u002F3.rules\u002F05.declarations-and-initialization-dcl\u002F02.dcl50-cpp","e7t6pCYSNIS3uQsrKbWC-FTOuYYxct2zqo0MSM1mGFo",[1520,1524],{"title":1521,"path":1522,"stem":1523,"children":-1},"Declarations and Initialization (DCL)","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fdeclarations-and-initialization-dcl","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F05.declarations-and-initialization-dcl\u002F01.index",{"title":1525,"path":1487,"stem":1526,"children":-1},"DCL51-CPP. Do not declare or define a reserved identifier","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F05.declarations-and-initialization-dcl\u002F03.dcl51-cpp",[1528],{"title":1529,"path":1530,"stem":1531,"children":1532},"SEI CERT C++ Coding Standard","\u002Fsei-cert-cpp-coding-standard","5.sei-cert-cpp-coding-standard\u002F1.index",[1533,1534,1601,1996,2200,2210],{"title":1529,"path":1530,"stem":1531},{"title":1535,"path":1536,"stem":1537,"children":1538},"Front Matter","\u002Fsei-cert-cpp-coding-standard\u002Ffront-matter","5.sei-cert-cpp-coding-standard\u002F2.front-matter\u002F1.index",[1539,1540],{"title":1535,"path":1536,"stem":1537},{"title":1541,"path":1542,"stem":1543,"children":1544},"Introduction","\u002Fsei-cert-cpp-coding-standard\u002Ffront-matter\u002Fintroduction","5.sei-cert-cpp-coding-standard\u002F2.front-matter\u002F2.introduction\u002F01.index",[1545,1546,1550,1554,1558,1562,1566,1570,1574,1578,1582,1586,1590,1594,1598],{"title":1541,"path":1542,"stem":1543},{"title":1547,"path":1548,"stem":1549},"Scope","\u002Fsei-cert-cpp-coding-standard\u002Ffront-matter\u002Fintroduction\u002Fscope","5.sei-cert-cpp-coding-standard\u002F2.front-matter\u002F2.introduction\u002F02.scope",{"title":1551,"path":1552,"stem":1553},"Audience","\u002Fsei-cert-cpp-coding-standard\u002Ffront-matter\u002Fintroduction\u002Faudience","5.sei-cert-cpp-coding-standard\u002F2.front-matter\u002F2.introduction\u002F03.audience",{"title":1555,"path":1556,"stem":1557},"Usage","\u002Fsei-cert-cpp-coding-standard\u002Ffront-matter\u002Fintroduction\u002Fusage","5.sei-cert-cpp-coding-standard\u002F2.front-matter\u002F2.introduction\u002F04.usage",{"title":1559,"path":1560,"stem":1561},"How this Coding Standard Is Organized","\u002Fsei-cert-cpp-coding-standard\u002Ffront-matter\u002Fintroduction\u002Fhow-this-coding-standard-is-organized","5.sei-cert-cpp-coding-standard\u002F2.front-matter\u002F2.introduction\u002F05.how-this-coding-standard-is-organized",{"title":1563,"path":1564,"stem":1565},"Relation to the CERT C Coding Standard","\u002Fsei-cert-cpp-coding-standard\u002Ffront-matter\u002Fintroduction\u002Frelation-to-the-cert-c-coding-standard","5.sei-cert-cpp-coding-standard\u002F2.front-matter\u002F2.introduction\u002F06.relation-to-the-cert-c-coding-standard",{"title":1567,"path":1568,"stem":1569},"Rules Versus Recommendations","\u002Fsei-cert-cpp-coding-standard\u002Ffront-matter\u002Fintroduction\u002Frules-versus-recommendations","5.sei-cert-cpp-coding-standard\u002F2.front-matter\u002F2.introduction\u002F07.rules-versus-recommendations",{"title":1571,"path":1572,"stem":1573},"Tool Selection and Validation","\u002Fsei-cert-cpp-coding-standard\u002Ffront-matter\u002Fintroduction\u002Ftool-selection-and-validation","5.sei-cert-cpp-coding-standard\u002F2.front-matter\u002F2.introduction\u002F08.tool-selection-and-validation",{"title":1575,"path":1576,"stem":1577},"Conformance Testing","\u002Fsei-cert-cpp-coding-standard\u002Ffront-matter\u002Fintroduction\u002Fconformance-testing","5.sei-cert-cpp-coding-standard\u002F2.front-matter\u002F2.introduction\u002F09.conformance-testing",{"title":1579,"path":1580,"stem":1581},"Development Process","\u002Fsei-cert-cpp-coding-standard\u002Ffront-matter\u002Fintroduction\u002Fdevelopment-process","5.sei-cert-cpp-coding-standard\u002F2.front-matter\u002F2.introduction\u002F10.development-process",{"title":1583,"path":1584,"stem":1585},"System Qualities","\u002Fsei-cert-cpp-coding-standard\u002Ffront-matter\u002Fintroduction\u002Fsystem-qualities","5.sei-cert-cpp-coding-standard\u002F2.front-matter\u002F2.introduction\u002F11.system-qualities",{"title":1587,"path":1588,"stem":1589},"Automatically Generated Code","\u002Fsei-cert-cpp-coding-standard\u002Ffront-matter\u002Fintroduction\u002Fautomatically-generated-code","5.sei-cert-cpp-coding-standard\u002F2.front-matter\u002F2.introduction\u002F12.automatically-generated-code",{"title":1591,"path":1592,"stem":1593},"Government Regulations","\u002Fsei-cert-cpp-coding-standard\u002Ffront-matter\u002Fintroduction\u002Fgovernment-regulations","5.sei-cert-cpp-coding-standard\u002F2.front-matter\u002F2.introduction\u002F13.government-regulations",{"title":1595,"path":1596,"stem":1597},"Acknowledgments","\u002Fsei-cert-cpp-coding-standard\u002Ffront-matter\u002Fintroduction\u002Facknowledgments","5.sei-cert-cpp-coding-standard\u002F2.front-matter\u002F2.introduction\u002F14.acknowledgments",{"title":1063,"path":1599,"stem":1600},"\u002Fsei-cert-cpp-coding-standard\u002Ffront-matter\u002Fintroduction\u002Fautomated-detection","5.sei-cert-cpp-coding-standard\u002F2.front-matter\u002F2.introduction\u002F15.automated-detection",{"title":1602,"path":1603,"stem":1604,"children":1605},"Rules","\u002Fsei-cert-cpp-coding-standard\u002Frules","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F01.index",[1606,1607,1629,1663,1705,1746,1804,1866,1880,1890,1928,1954],{"title":1602,"path":1603,"stem":1604},{"title":1608,"path":1609,"stem":1610,"children":1611},"Characters and Strings (STR)","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fcharacters-and-strings-str","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F02.characters-and-strings-str\u002F1.index",[1612,1613,1617,1621,1625],{"title":1608,"path":1609,"stem":1610},{"title":1614,"path":1615,"stem":1616},"STR50-CPP. Guarantee that storage for strings has sufficient space for character data and the null terminator","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fcharacters-and-strings-str\u002Fstr50-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F02.characters-and-strings-str\u002F2.str50-cpp",{"title":1618,"path":1619,"stem":1620},"STR52-CPP. Use valid references, pointers, and iterators to reference elements of a basic_string","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fcharacters-and-strings-str\u002Fstr52-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F02.characters-and-strings-str\u002F3.str52-cpp",{"title":1622,"path":1623,"stem":1624},"STR53-CPP. Range check element access","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fcharacters-and-strings-str\u002Fstr53-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F02.characters-and-strings-str\u002F4.str53-cpp",{"title":1626,"path":1627,"stem":1628},"string from a null pointer","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fcharacters-and-strings-str\u002Fstring-from-a-null-pointer","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F02.characters-and-strings-str\u002F5.string-from-a-null-pointer",{"title":1630,"path":1631,"stem":1632,"children":1633},"Concurrency (CON)","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fconcurrency-con","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F03.concurrency-con\u002F1.index",[1634,1635,1639,1643,1647,1651,1655,1659],{"title":1630,"path":1631,"stem":1632},{"title":1636,"path":1637,"stem":1638},"CON50-CPP. Do not destroy a mutex while it is locked","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fconcurrency-con\u002Fcon50-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F03.concurrency-con\u002F2.con50-cpp",{"title":1640,"path":1641,"stem":1642},"CON51-CPP. Ensure actively held locks are released on exceptional conditions","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fconcurrency-con\u002Fcon51-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F03.concurrency-con\u002F3.con51-cpp",{"title":1644,"path":1645,"stem":1646},"CON52-CPP. Prevent data races when accessing bit-fields from multiple threads","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fconcurrency-con\u002Fcon52-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F03.concurrency-con\u002F4.con52-cpp",{"title":1648,"path":1649,"stem":1650},"CON53-CPP. Avoid deadlock by locking in a predefined order","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fconcurrency-con\u002Fcon53-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F03.concurrency-con\u002F5.con53-cpp",{"title":1652,"path":1653,"stem":1654},"CON54-CPP. Wrap functions that can spuriously wake up in a loop","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fconcurrency-con\u002Fcon54-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F03.concurrency-con\u002F6.con54-cpp",{"title":1656,"path":1657,"stem":1658},"CON55-CPP. Preserve thread safety and liveness when using condition variables","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fconcurrency-con\u002Fcon55-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F03.concurrency-con\u002F7.con55-cpp",{"title":1660,"path":1661,"stem":1662},"CON56-CPP. Do not speculatively lock a non-recursive mutex that is already owned by the calling thread","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fconcurrency-con\u002Fcon56-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F03.concurrency-con\u002F8.con56-cpp",{"title":1664,"path":1665,"stem":1666,"children":1667},"Containers (CTR)","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fcontainers-ctr","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F04.containers-ctr\u002F01.index",[1668,1669,1673,1677,1681,1685,1689,1693,1697,1701],{"title":1664,"path":1665,"stem":1666},{"title":1670,"path":1671,"stem":1672},"CTR50-CPP. Guarantee that container indices and iterators are within the valid range","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fcontainers-ctr\u002Fctr50-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F04.containers-ctr\u002F02.ctr50-cpp",{"title":1674,"path":1675,"stem":1676},"CTR51-CPP. Use valid references, pointers, and iterators to reference elements of a container","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fcontainers-ctr\u002Fctr51-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F04.containers-ctr\u002F03.ctr51-cpp",{"title":1678,"path":1679,"stem":1680},"CTR52-CPP. Guarantee that library functions do not overflow","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fcontainers-ctr\u002Fctr52-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F04.containers-ctr\u002F04.ctr52-cpp",{"title":1682,"path":1683,"stem":1684},"CTR53-CPP. Use valid iterator ranges","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fcontainers-ctr\u002Fctr53-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F04.containers-ctr\u002F05.ctr53-cpp",{"title":1686,"path":1687,"stem":1688},"CTR54-CPP. Do not subtract iterators that do not refer to the same container","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fcontainers-ctr\u002Fctr54-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F04.containers-ctr\u002F06.ctr54-cpp",{"title":1690,"path":1691,"stem":1692},"CTR55-CPP. Do not use an additive operator on an iterator if the result would overflow","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fcontainers-ctr\u002Fctr55-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F04.containers-ctr\u002F07.ctr55-cpp",{"title":1694,"path":1695,"stem":1696},"CTR56-CPP. Do not use pointer arithmetic on polymorphic objects","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fcontainers-ctr\u002Fctr56-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F04.containers-ctr\u002F08.ctr56-cpp",{"title":1698,"path":1699,"stem":1700},"CTR57-CPP. Provide a valid ordering predicate","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fcontainers-ctr\u002Fctr57-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F04.containers-ctr\u002F09.ctr57-cpp",{"title":1702,"path":1703,"stem":1704},"CTR58-CPP. Predicate function objects should not be mutable","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fcontainers-ctr\u002Fctr58-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F04.containers-ctr\u002F10.ctr58-cpp",{"title":1521,"path":1522,"stem":1523,"children":1706},[1707,1708,1709,1710,1714,1718,1722,1726,1730,1734,1738,1742],{"title":1521,"path":1522,"stem":1523},{"title":30,"path":1515,"stem":1517},{"title":1525,"path":1487,"stem":1526},{"title":1711,"path":1712,"stem":1713},"DCL52-CPP. Never qualify a reference type with const or volatile","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fdeclarations-and-initialization-dcl\u002Fdcl52-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F05.declarations-and-initialization-dcl\u002F04.dcl52-cpp",{"title":1715,"path":1716,"stem":1717},"DCL53-CPP. Do not write syntactically ambiguous declarations","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fdeclarations-and-initialization-dcl\u002Fdcl53-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F05.declarations-and-initialization-dcl\u002F05.dcl53-cpp",{"title":1719,"path":1720,"stem":1721},"DCL54-CPP. Overload allocation and deallocation functions as a pair in the same scope","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fdeclarations-and-initialization-dcl\u002Fdcl54-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F05.declarations-and-initialization-dcl\u002F06.dcl54-cpp",{"title":1723,"path":1724,"stem":1725},"DCL55-CPP. Avoid information leakage when passing a class object across a trust boundary","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fdeclarations-and-initialization-dcl\u002Fdcl55-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F05.declarations-and-initialization-dcl\u002F07.dcl55-cpp",{"title":1727,"path":1728,"stem":1729},"DCL56-CPP. Avoid cycles during initialization of static objects","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fdeclarations-and-initialization-dcl\u002Fdcl56-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F05.declarations-and-initialization-dcl\u002F08.dcl56-cpp",{"title":1731,"path":1732,"stem":1733},"DCL57-CPP. Do not let exceptions escape from destructors or deallocation functions","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fdeclarations-and-initialization-dcl\u002Fdcl57-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F05.declarations-and-initialization-dcl\u002F09.dcl57-cpp",{"title":1735,"path":1736,"stem":1737},"DCL58-CPP. Do not modify the standard namespaces","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fdeclarations-and-initialization-dcl\u002Fdcl58-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F05.declarations-and-initialization-dcl\u002F10.dcl58-cpp",{"title":1739,"path":1740,"stem":1741},"DCL59-CPP. Do not define an unnamed namespace in a header file","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fdeclarations-and-initialization-dcl\u002Fdcl59-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F05.declarations-and-initialization-dcl\u002F11.dcl59-cpp",{"title":1743,"path":1744,"stem":1745},"DCL60-CPP. Obey the one-definition rule","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fdeclarations-and-initialization-dcl\u002Fdcl60-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F05.declarations-and-initialization-dcl\u002F12.dcl60-cpp",{"title":1747,"path":1748,"stem":1749,"children":1750},"Exceptions and Error Handling (ERR)","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexceptions-and-error-handling-err","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F06.exceptions-and-error-handling-err\u002F01.index",[1751,1752,1756,1760,1764,1768,1772,1776,1780,1784,1788,1792,1796,1800],{"title":1747,"path":1748,"stem":1749},{"title":1753,"path":1754,"stem":1755},"ERR50-CPP. Do not abruptly terminate the program","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexceptions-and-error-handling-err\u002Ferr50-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F06.exceptions-and-error-handling-err\u002F02.err50-cpp",{"title":1757,"path":1758,"stem":1759},"ERR51-CPP. Handle all exceptions","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexceptions-and-error-handling-err\u002Ferr51-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F06.exceptions-and-error-handling-err\u002F03.err51-cpp",{"title":1761,"path":1762,"stem":1763},"ERR52-CPP. Do not use setjmp() or longjmp()","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexceptions-and-error-handling-err\u002Ferr52-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F06.exceptions-and-error-handling-err\u002F04.err52-cpp",{"title":1765,"path":1766,"stem":1767},"ERR53-CPP. Do not reference base classes or class data members in a constructor or destructor function-try-block handler","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexceptions-and-error-handling-err\u002Ferr53-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F06.exceptions-and-error-handling-err\u002F05.err53-cpp",{"title":1769,"path":1770,"stem":1771},"ERR54-CPP. Catch handlers should order their parameter types from most derived to least derived","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexceptions-and-error-handling-err\u002Ferr54-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F06.exceptions-and-error-handling-err\u002F06.err54-cpp",{"title":1773,"path":1774,"stem":1775},"ERR55-CPP. Honor exception specifications","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexceptions-and-error-handling-err\u002Ferr55-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F06.exceptions-and-error-handling-err\u002F07.err55-cpp",{"title":1777,"path":1778,"stem":1779},"ERR56-CPP. Guarantee exception safety","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexceptions-and-error-handling-err\u002Ferr56-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F06.exceptions-and-error-handling-err\u002F08.err56-cpp",{"title":1781,"path":1782,"stem":1783},"ERR57-CPP. Do not leak resources when handling exceptions","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexceptions-and-error-handling-err\u002Ferr57-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F06.exceptions-and-error-handling-err\u002F09.err57-cpp",{"title":1785,"path":1786,"stem":1787},"ERR58-CPP. Handle all exceptions thrown before main() begins executing","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexceptions-and-error-handling-err\u002Ferr58-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F06.exceptions-and-error-handling-err\u002F10.err58-cpp",{"title":1789,"path":1790,"stem":1791},"ERR59-CPP. Do not throw an exception across execution boundaries","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexceptions-and-error-handling-err\u002Ferr59-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F06.exceptions-and-error-handling-err\u002F11.err59-cpp",{"title":1793,"path":1794,"stem":1795},"ERR60-CPP. Exception objects must be nothrow copy constructible","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexceptions-and-error-handling-err\u002Ferr60-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F06.exceptions-and-error-handling-err\u002F12.err60-cpp",{"title":1797,"path":1798,"stem":1799},"ERR61-CPP. Catch exceptions by lvalue reference","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexceptions-and-error-handling-err\u002Ferr61-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F06.exceptions-and-error-handling-err\u002F13.err61-cpp",{"title":1801,"path":1802,"stem":1803},"ERR62-CPP. Detect errors when converting a string to a number","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexceptions-and-error-handling-err\u002Ferr62-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F06.exceptions-and-error-handling-err\u002F14.err62-cpp",{"title":1805,"path":1806,"stem":1807,"children":1808},"Expressions (EXP)","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexpressions-exp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F07.expressions-exp\u002F01.index",[1809,1810,1814,1818,1822,1826,1830,1834,1838,1842,1846,1850,1854,1858,1862],{"title":1805,"path":1806,"stem":1807},{"title":1811,"path":1812,"stem":1813},"EXP50-CPP. Do not depend on the order of evaluation for side effects","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexpressions-exp\u002Fexp50-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F07.expressions-exp\u002F02.exp50-cpp",{"title":1815,"path":1816,"stem":1817},"EXP51-CPP. Do not delete an array through a pointer of the incorrect type","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexpressions-exp\u002Fexp51-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F07.expressions-exp\u002F03.exp51-cpp",{"title":1819,"path":1820,"stem":1821},"EXP52-CPP. Do not rely on side effects in unevaluated operands","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexpressions-exp\u002Fexp52-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F07.expressions-exp\u002F04.exp52-cpp",{"title":1823,"path":1824,"stem":1825},"EXP53-CPP. Do not read uninitialized memory","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexpressions-exp\u002Fexp53-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F07.expressions-exp\u002F05.exp53-cpp",{"title":1827,"path":1828,"stem":1829},"EXP54-CPP. Do not access an object outside of its lifetime","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexpressions-exp\u002Fexp54-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F07.expressions-exp\u002F06.exp54-cpp",{"title":1831,"path":1832,"stem":1833},"EXP55-CPP. Do not access a cv-qualified object through a cv-unqualified type","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexpressions-exp\u002Fexp55-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F07.expressions-exp\u002F07.exp55-cpp",{"title":1835,"path":1836,"stem":1837},"EXP56-CPP. Do not call a function with a mismatched language linkage","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexpressions-exp\u002Fexp56-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F07.expressions-exp\u002F08.exp56-cpp",{"title":1839,"path":1840,"stem":1841},"EXP57-CPP. Do not cast or delete pointers to incomplete classes","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexpressions-exp\u002Fexp57-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F07.expressions-exp\u002F09.exp57-cpp",{"title":1843,"path":1844,"stem":1845},"EXP58-CPP. Pass an object of the correct type to va_start","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexpressions-exp\u002Fexp58-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F07.expressions-exp\u002F10.exp58-cpp",{"title":1847,"path":1848,"stem":1849},"EXP59-CPP. Use offsetof() on valid types and members","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexpressions-exp\u002Fexp59-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F07.expressions-exp\u002F11.exp59-cpp",{"title":1851,"path":1852,"stem":1853},"EXP60-CPP. Do not pass a nonstandard-layout type object across execution boundaries","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexpressions-exp\u002Fexp60-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F07.expressions-exp\u002F12.exp60-cpp",{"title":1855,"path":1856,"stem":1857},"EXP61-CPP. A lambda object must not outlive any of its reference captured objects","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexpressions-exp\u002Fexp61-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F07.expressions-exp\u002F13.exp61-cpp",{"title":1859,"path":1860,"stem":1861},"EXP62-CPP. Do not access the bits of an object representation that are not part of the object's value representation","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexpressions-exp\u002Fexp62-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F07.expressions-exp\u002F14.exp62-cpp",{"title":1863,"path":1864,"stem":1865},"EXP63-CPP. Do not rely on the value of a moved-from object","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexpressions-exp\u002Fexp63-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F07.expressions-exp\u002F15.exp63-cpp",{"title":1867,"path":1868,"stem":1869,"children":1870},"Input Output (FIO)","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Finput-output-fio","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F08.input-output-fio\u002F1.index",[1871,1872,1876],{"title":1867,"path":1868,"stem":1869},{"title":1873,"path":1874,"stem":1875},"FIO50-CPP. Do not alternately input and output from a file stream without an intervening positioning call","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Finput-output-fio\u002Ffio50-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F08.input-output-fio\u002F2.fio50-cpp",{"title":1877,"path":1878,"stem":1879},"FIO51-CPP. Close files when they are no longer needed","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Finput-output-fio\u002Ffio51-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F08.input-output-fio\u002F3.fio51-cpp",{"title":1881,"path":1882,"stem":1883,"children":1884},"Integers (INT)","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fintegers-int","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F09.integers-int\u002F1.index",[1885,1886],{"title":1881,"path":1882,"stem":1883},{"title":1887,"path":1888,"stem":1889},"INT50-CPP. Do not cast to an out-of-range enumeration value","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fintegers-int\u002Fint50-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F09.integers-int\u002F2.int50-cpp",{"title":1891,"path":1892,"stem":1893,"children":1894},"Memory Management (MEM)","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fmemory-management-mem","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F10.memory-management-mem\u002F1.index",[1895,1896,1900,1904,1908,1912,1916,1920,1924],{"title":1891,"path":1892,"stem":1893},{"title":1897,"path":1898,"stem":1899},"MEM50-CPP. Do not access freed memory","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fmemory-management-mem\u002Fmem50-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F10.memory-management-mem\u002F2.mem50-cpp",{"title":1901,"path":1902,"stem":1903},"MEM51-CPP. Properly deallocate dynamically allocated resources","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fmemory-management-mem\u002Fmem51-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F10.memory-management-mem\u002F3.mem51-cpp",{"title":1905,"path":1906,"stem":1907},"MEM52-CPP. Detect and handle memory allocation errors","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fmemory-management-mem\u002Fmem52-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F10.memory-management-mem\u002F4.mem52-cpp",{"title":1909,"path":1910,"stem":1911},"MEM53-CPP. Explicitly construct and destruct objects when manually managing object lifetime","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fmemory-management-mem\u002Fmem53-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F10.memory-management-mem\u002F5.mem53-cpp",{"title":1913,"path":1914,"stem":1915},"MEM54-CPP. Provide placement new with properly aligned pointers to sufficient storage capacity","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fmemory-management-mem\u002Fmem54-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F10.memory-management-mem\u002F6.mem54-cpp",{"title":1917,"path":1918,"stem":1919},"MEM55-CPP. Honor replacement dynamic storage management requirements","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fmemory-management-mem\u002Fmem55-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F10.memory-management-mem\u002F7.mem55-cpp",{"title":1921,"path":1922,"stem":1923},"MEM56-CPP. Do not store an already-owned pointer value in an unrelated smart pointer","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fmemory-management-mem\u002Fmem56-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F10.memory-management-mem\u002F8.mem56-cpp",{"title":1925,"path":1926,"stem":1927},"MEM57-CPP. Avoid using default operator new for over-aligned types","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fmemory-management-mem\u002Fmem57-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F10.memory-management-mem\u002F9.mem57-cpp",{"title":1929,"path":1930,"stem":1931,"children":1932},"Miscellaneous (MSC)","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fmiscellaneous-msc","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F11.miscellaneous-msc\u002F1.index",[1933,1934,1938,1942,1946,1950],{"title":1929,"path":1930,"stem":1931},{"title":1935,"path":1936,"stem":1937},"MSC51-CPP. Ensure your random number generator is properly seeded","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fmiscellaneous-msc\u002Fmsc51-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F11.miscellaneous-msc\u002F2.msc51-cpp",{"title":1939,"path":1940,"stem":1941},"MSC52-CPP. Value-returning functions must return a value from all exit paths","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fmiscellaneous-msc\u002Fmsc52-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F11.miscellaneous-msc\u002F3.msc52-cpp",{"title":1943,"path":1944,"stem":1945},"MSC53-CPP. Do not return from a function declared [[noreturn]]","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fmiscellaneous-msc\u002Fmsc53-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F11.miscellaneous-msc\u002F4.msc53-cpp",{"title":1947,"path":1948,"stem":1949},"MSC54-CPP. A signal handler must be a plain old function","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fmiscellaneous-msc\u002Fmsc54-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F11.miscellaneous-msc\u002F5.msc54-cpp",{"title":1951,"path":1952,"stem":1953},"rand() for generating pseudorandom numbers","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fmiscellaneous-msc\u002Frand-for-generating-pseudorandom-numbers","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F11.miscellaneous-msc\u002F6.rand-for-generating-pseudorandom-numbers",{"title":1955,"path":1956,"stem":1957,"children":1958},"Object Oriented Programming (OOP)","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fobject-oriented-programming-oop","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F12.object-oriented-programming-oop\u002F01.index",[1959,1960,1964,1968,1972,1976,1980,1984,1988,1992],{"title":1955,"path":1956,"stem":1957},{"title":1961,"path":1962,"stem":1963},"OOP50-CPP. Do not invoke virtual functions from constructors or destructors","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fobject-oriented-programming-oop\u002Foop50-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F12.object-oriented-programming-oop\u002F02.oop50-cpp",{"title":1965,"path":1966,"stem":1967},"OOP51-CPP. Do not slice derived objects","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fobject-oriented-programming-oop\u002Foop51-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F12.object-oriented-programming-oop\u002F03.oop51-cpp",{"title":1969,"path":1970,"stem":1971},"OOP52-CPP. Do not delete a polymorphic object without a virtual destructor","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fobject-oriented-programming-oop\u002Foop52-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F12.object-oriented-programming-oop\u002F04.oop52-cpp",{"title":1973,"path":1974,"stem":1975},"OOP53-CPP. Write constructor member initializers in the canonical order","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fobject-oriented-programming-oop\u002Foop53-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F12.object-oriented-programming-oop\u002F05.oop53-cpp",{"title":1977,"path":1978,"stem":1979},"OOP54-CPP. Gracefully handle self-copy assignment","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fobject-oriented-programming-oop\u002Foop54-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F12.object-oriented-programming-oop\u002F06.oop54-cpp",{"title":1981,"path":1982,"stem":1983},"OOP55-CPP. Do not use pointer-to-member operators to access nonexistent members","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fobject-oriented-programming-oop\u002Foop55-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F12.object-oriented-programming-oop\u002F07.oop55-cpp",{"title":1985,"path":1986,"stem":1987},"OOP56-CPP. Honor replacement handler requirements","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fobject-oriented-programming-oop\u002Foop56-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F12.object-oriented-programming-oop\u002F08.oop56-cpp",{"title":1989,"path":1990,"stem":1991},"OOP57-CPP. Prefer special member functions and overloaded operators to C Standard Library functions","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fobject-oriented-programming-oop\u002Foop57-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F12.object-oriented-programming-oop\u002F09.oop57-cpp",{"title":1993,"path":1994,"stem":1995},"OOP58-CPP. Copy operations must not mutate the source object","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fobject-oriented-programming-oop\u002Foop58-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F12.object-oriented-programming-oop\u002F10.oop58-cpp",{"title":1997,"path":1998,"stem":1999,"children":2000},"Back Matter","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F1.index",[2001,2002,2006,2010,2182,2196],{"title":1997,"path":1998,"stem":1999},{"title":2003,"path":2004,"stem":2005},"AA. Bibliography","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Faa-bibliography","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F2.aa-bibliography",{"title":2007,"path":2008,"stem":2009},"BB. Definitions","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fbb-definitions","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F3.bb-definitions",{"title":2011,"path":2012,"stem":2013,"children":2014},"CC. Analyzers","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F01.index",[2015,2016,2018,2022,2024,2028,2030,2034,2038,2042,2046,2050,2054,2056,2060,2064,2068,2072,2076,2080,2084,2088,2092,2094,2098,2100,2104,2107,2111,2114,2118,2120,2124,2128,2132,2136,2140,2144,2148,2150,2154,2156,2160,2164,2168,2170,2174,2178],{"title":2011,"path":2012,"stem":2013},{"title":1105,"path":1104,"stem":2017},"5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F02.astree",{"title":2019,"path":2020,"stem":2021},"Astrée_V","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fastree_v","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F03.astree_v",{"title":1136,"path":1135,"stem":2023},"5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F04.axivion-bauhaus-suite",{"title":2025,"path":2026,"stem":2027},"Axivion Bauhaus Suite_V","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Faxivion-bauhaus-suite_v","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F05.axivion-bauhaus-suite_v",{"title":1162,"path":1161,"stem":2029},"5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F06.clang",{"title":2031,"path":2032,"stem":2033},"Clang_38_V","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fclang_38_v","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F07.clang_38_v",{"title":2035,"path":2036,"stem":2037},"Clang_39_V","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fclang_39_v","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F08.clang_39_v",{"title":2039,"path":2040,"stem":2041},"Clang_40_V","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fclang_40_v","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F09.clang_40_v",{"title":2043,"path":2044,"stem":2045},"Clang_V","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fclang_v","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F10.clang_v",{"title":2047,"path":2048,"stem":2049},"Codee","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fcodee","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F11.codee",{"title":2051,"path":2052,"stem":2053},"Codee_V","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fcodee_v","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F12.codee_v",{"title":1189,"path":1188,"stem":2055},"5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F13.codesonar",{"title":2057,"path":2058,"stem":2059},"CodeSonar_V","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fcodesonar_v","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F14.codesonar_v",{"title":2061,"path":2062,"stem":2063},"Coverity","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fcoverity","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F15.coverity",{"title":2065,"path":2066,"stem":2067},"Coverity_V","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fcoverity_v","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F16.coverity_v",{"title":2069,"path":2070,"stem":2071},"ECLAIR","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Feclair","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F17.eclair",{"title":2073,"path":2074,"stem":2075},"ECLAIR_V","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Feclair_v","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F18.eclair_v",{"title":2077,"path":2078,"stem":2079},"EDG","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fedg","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F19.edg",{"title":2081,"path":2082,"stem":2083},"Edg_V","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fedg_v","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F20.edg_v",{"title":2085,"path":2086,"stem":2087},"GCC","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fgcc","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F21.gcc",{"title":2089,"path":2090,"stem":2091},"Gcc_V","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fgcc_v","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F22.gcc_v",{"title":1224,"path":1223,"stem":2093},"5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F23.helix-qac",{"title":2095,"path":2096,"stem":2097},"Helix QAC_V","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fhelix-qac_v","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F24.helix-qac_v",{"title":1250,"path":1249,"stem":2099},"5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F25.klocwork",{"title":2101,"path":2102,"stem":2103},"Klocwork_V","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fklocwork_v","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F26.klocwork_v",{"title":2105,"path":1274,"stem":2106},"LDRA","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F27.ldra",{"title":2108,"path":2109,"stem":2110},"Ldra_V","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fldra_v","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F28.ldra_v",{"title":2112,"path":1306,"stem":2113},"Parasoft","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F29.parasoft",{"title":2115,"path":2116,"stem":2117},"Parasoft_V","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fparasoft_v","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F30.parasoft_v",{"title":1331,"path":1330,"stem":2119},"5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F31.polyspace-bug-finder",{"title":2121,"path":2122,"stem":2123},"Polyspace Bug Finder_V","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fpolyspace-bug-finder_v","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F32.polyspace-bug-finder_v",{"title":2125,"path":2126,"stem":2127},"PRQA QA-C++","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fprqa-qa-cpp","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F33.prqa-qa-cpp",{"title":2129,"path":2130,"stem":2131},"PRQA QA-C++_V","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fprqa-qa-cpp_v","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F34.prqa-qa-cpp_v",{"title":2133,"path":2134,"stem":2135},"PVS-Studio","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fpvs-studio","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F35.pvs-studio",{"title":2137,"path":2138,"stem":2139},"PVS-Studio_V","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fpvs-studio_v","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F36.pvs-studio_v",{"title":2141,"path":2142,"stem":2143},"Rose","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Frose","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F37.rose",{"title":2145,"path":2146,"stem":2147},"Rose_V","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Frose_v","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F38.rose_v",{"title":1357,"path":1356,"stem":2149},"5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F39.rulechecker",{"title":2151,"path":2152,"stem":2153},"RuleChecker_V","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Frulechecker_v","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F40.rulechecker_v",{"title":1379,"path":1378,"stem":2155},"5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F41.security-reviewer-static-reviewer",{"title":2157,"path":2158,"stem":2159},"Security Reviewer - Static Reviewer_V","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fsecurity-reviewer-static-reviewer_v","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F42.security-reviewer-static-reviewer_v",{"title":2161,"path":2162,"stem":2163},"Semgrep","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fsemgrep","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F43.semgrep",{"title":2165,"path":2166,"stem":2167},"Semgrep_V","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fsemgrep_v","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F44.semgrep_v",{"title":1404,"path":1403,"stem":2169},"5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F45.sonarqube-ccpp-plugin",{"title":2171,"path":2172,"stem":2173},"SonarQube C\u002FC++ Plugin_V","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fsonarqube-ccpp-plugin_v","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F46.sonarqube-ccpp-plugin_v",{"title":2175,"path":2176,"stem":2177},"Splint","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fsplint","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F47.splint",{"title":2179,"path":2180,"stem":2181},"Splint_V","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fsplint_v","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F48.splint_v",{"title":2183,"path":2184,"stem":2185,"children":2186},"DD. Related Guidelines","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fdd-related-guidelines","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F5.dd-related-guidelines\u002F1.index",[2187,2188,2192],{"title":2183,"path":2184,"stem":2185},{"title":2189,"path":2190,"stem":2191},"2008","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fdd-related-guidelines\u002F2.2008","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F5.dd-related-guidelines\u002F2.2008",{"title":2193,"path":2194,"stem":2195},"MITRE CWE","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fdd-related-guidelines\u002Fmitre-cwe","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F5.dd-related-guidelines\u002F3.mitre-cwe",{"title":2197,"path":2198,"stem":2199},"EE. Risk Assessments","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fee-risk-assessments","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F6.ee-risk-assessments",{"title":2201,"path":2202,"stem":2203,"children":2204},"Admin","\u002Fsei-cert-cpp-coding-standard\u002Fadmin","5.sei-cert-cpp-coding-standard\u002F5.admin\u002F1.index",[2205,2206],{"title":2201,"path":2202,"stem":2203},{"title":2207,"path":2208,"stem":2209},"TODO List","\u002Fsei-cert-cpp-coding-standard\u002Fadmin\u002Ftodo-list","5.sei-cert-cpp-coding-standard\u002F5.admin\u002F2.todo-list",{"title":2211,"path":2212,"stem":2213},"Errata for SEI CERT C++ Coding Standard (2016 Edition)","\u002Fsei-cert-cpp-coding-standard\u002Ferrata-for-sei-cert-cpp-coding-standard-2016-edition","5.sei-cert-cpp-coding-standard\u002F6.errata-for-sei-cert-cpp-coding-standard-2016-edition",1775657779530]