[{"data":1,"prerenderedAt":1800},["ShallowReactive",2],{"global-navigation":3,"page-\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fconcurrency-con\u002Fcon56-cpp":28,"surround-\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fconcurrency-con\u002Fcon56-cpp":1090,"sidebar-sei-cert-cpp-coding-standard":1098},[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":1072,"extension":1073,"meta":1074,"navigation":7,"path":1086,"seo":1087,"stem":1088,"__hash__":1089},"content\u002F5.sei-cert-cpp-coding-standard\u002F3.rules\u002F03.concurrency-con\u002F8.con56-cpp.md","CON56-CPP. Do not speculatively lock a non-recursive mutex that is already owned by the calling thread",{"type":32,"value":33,"toc":1063},"minimark",[34,38,85,93,119,122,144,147,158,178,183,197,508,512,515,715,719,722,788,792,956,960,974,978,1007,1011,1034,1037,1059],[35,36,30],"h1",{"id":37},"con56-cpp-do-not-speculatively-lock-a-non-recursive-mutex-that-is-already-owned-by-the-calling-thread",[39,40,41,42,47,48,52,53,56,57,60,61,64,65,68,69,60,72,60,75,60,78,64,81,84],"p",{},"The C++ Standard Library supplies both recursive and non-recursive mutex classes used to protect ",[43,44,46],"a",{"href":45},"\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fbb-definitions#BB.Definitions-criticalsections","critical sections"," . The recursive mutex classes ( ",[49,50,51],"code",{},"std::recursive_mutex"," and ",[49,54,55],{},"std::recursive_timed_mutex"," ) differ from the non-recursive mutex classes ( ",[49,58,59],{},"std::mutex"," , ",[49,62,63],{},"std::timed_mutex"," , and ",[49,66,67],{},"std::shared_timed_mutex"," ) in that a recursive mutex may be locked recursively by the thread that currently owns the mutex. All mutex classes support the ability to speculatively lock the mutex through functions such as ",[49,70,71],{},"try_lock()",[49,73,74],{},"try_lock_for()",[49,76,77],{},"try_lock_until()",[49,79,80],{},"try_lock_shared_for()",[49,82,83],{},"try_lock_shared_until()"," . These speculative locking functions attempt to obtain ownership of the mutex for the calling thread, but will not block in the event the ownership cannot be obtained. Instead, they return a Boolean value specifying whether the ownership of the mutex was obtained or not.",[39,86,87,88,92],{},"The C++ Standard, [thread.mutex.requirements.mutex], paragraphs 14 and 15 [ ",[43,89,91],{"href":90},"\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Faa-bibliography#AA.Bibliography-ISO\u002FIEC14882-2014","ISO\u002FIEC 14882-2014"," ], state the following:",[94,95,96],"blockquote",{},[39,97,98,99,102,103,106,107,110,111,60,113,115,116,118],{},"The expression ",[49,100,101],{},"m.try_lock()"," shall be well-formed and have the following semantics:",[104,105],"br",{},"\nRequires: If ",[49,108,109],{},"m"," is of type ",[49,112,59],{},[49,114,63],{}," , or ",[49,117,67],{}," , the calling thread does not own the mutex.",[39,120,121],{},"Further, [thread.timedmutex.class], paragraph 3, in part, states the following:",[94,123,124],{},[39,125,126,127,129,130,133,134,60,137,60,139,115,141,143],{},"The behavior of a program is undefined if:",[104,128],{},"\n— a thread that owns a ",[49,131,132],{},"timed_mutex"," object calls ",[49,135,136],{},"lock()",[49,138,71],{},[49,140,74],{},[49,142,77],{}," on that object",[39,145,146],{},"Finally, [thread.sharedtimedmutex.class], paragraph 3, in part, states the following:",[94,148,149],{},[39,150,126,151,153,154,157],{},[104,152],{},"\n— a thread attempts to recursively gain any ownership of a ",[49,155,156],{},"shared_timed_mutex"," .",[39,159,160,161,165,166,60,168,60,170,60,172,174,175,177],{},"Thus, attempting to speculatively lock a non-recursive mutex object that is already owned by the calling thread is ",[43,162,164],{"href":163},"\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fbb-definitions#BB.Definitions-undefinedbehavior","undefined behavior"," . Do not call ",[49,167,71],{},[49,169,74],{},[49,171,77],{},[49,173,80],{}," , or ",[49,176,83],{}," on a non-recursive mutex object from a thread that already owns that mutex object.",[179,180,182],"h2",{"id":181},"noncompliant-code-example","Noncompliant Code Example",[39,184,185,186,188,189,192,193,157],{},"In this noncompliant code example, the mutex ",[49,187,109],{}," is locked by the thread's initial entry point and is speculatively locked in the ",[49,190,191],{},"do_work()"," function from the same thread, resulting in undefined behavior because it is not a recursive mutex. With common implementations, this may result in ",[43,194,196],{"href":195},"\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fbb-definitions#BB.Definitions-deadlock","deadlock",[198,199,201],"code-block",{"quality":200},"bad",[202,203,208],"pre",{"className":204,"code":205,"language":206,"meta":207,"style":207},"language-c shiki shiki-themes github-light github-dark monokai","#include \u003Cmutex>\n#include \u003Cthread>\n\nstd::mutex m;\n\nvoid do_thread_safe_work();\n\nvoid do_work() {\n  while (!m.try_lock()) {\n    \u002F\u002F The lock is not owned yet, do other work while waiting.\n    do_thread_safe_work();\n  }\n  try {\n\n    \u002F\u002F The mutex is now locked; perform work on shared resources.\n    \u002F\u002F ...\n\n  \u002F\u002F Release the mutex.\n  catch (...) {\n    m.unlock();\n    throw;\n  }\n  m.unlock();\n}\n\nvoid start_func() {\n  std::lock_guard\u003Cstd::mutex> lock(m);\n  do_work();\n}\n\nint main() {\n  std::thread t(start_func);\n\n  do_work();\n\n  t.join();\n}\n","c","",[49,209,210,223,231,237,244,249,263,268,279,300,307,315,321,327,332,338,344,349,355,361,372,378,383,393,399,404,414,434,442,447,452,463,475,480,487,492,503],{"__ignoreMap":207},[211,212,215,219],"span",{"class":213,"line":214},"line",1,[211,216,218],{"class":217},"sC2Qs","#include",[211,220,222],{"class":221},"sstjo"," \u003Cmutex>\n",[211,224,226,228],{"class":213,"line":225},2,[211,227,218],{"class":217},[211,229,230],{"class":221}," \u003Cthread>\n",[211,232,234],{"class":213,"line":233},3,[211,235,236],{"emptyLinePlaceholder":7},"\n",[211,238,240],{"class":213,"line":239},4,[211,241,243],{"class":242},"sMOD_","std::mutex m;\n",[211,245,247],{"class":213,"line":246},5,[211,248,236],{"emptyLinePlaceholder":7},[211,250,252,256,260],{"class":213,"line":251},6,[211,253,255],{"class":254},"sq6CD","void",[211,257,259],{"class":258},"srTi1"," do_thread_safe_work",[211,261,262],{"class":242},"();\n",[211,264,266],{"class":213,"line":265},7,[211,267,236],{"emptyLinePlaceholder":7},[211,269,271,273,276],{"class":213,"line":270},8,[211,272,255],{"class":254},[211,274,275],{"class":258}," do_work",[211,277,278],{"class":242},"() {\n",[211,280,282,285,288,291,294,297],{"class":213,"line":281},9,[211,283,284],{"class":217},"  while",[211,286,287],{"class":242}," (",[211,289,290],{"class":217},"!",[211,292,293],{"class":242},"m.",[211,295,296],{"class":258},"try_lock",[211,298,299],{"class":242},"()) {\n",[211,301,303],{"class":213,"line":302},10,[211,304,306],{"class":305},"s8-w5","    \u002F\u002F The lock is not owned yet, do other work while waiting.\n",[211,308,310,313],{"class":213,"line":309},11,[211,311,312],{"class":258},"    do_thread_safe_work",[211,314,262],{"class":242},[211,316,318],{"class":213,"line":317},12,[211,319,320],{"class":242},"  }\n",[211,322,324],{"class":213,"line":323},13,[211,325,326],{"class":242},"  try {\n",[211,328,330],{"class":213,"line":329},14,[211,331,236],{"emptyLinePlaceholder":7},[211,333,335],{"class":213,"line":334},15,[211,336,337],{"class":305},"    \u002F\u002F The mutex is now locked; perform work on shared resources.\n",[211,339,341],{"class":213,"line":340},16,[211,342,343],{"class":305},"    \u002F\u002F ...\n",[211,345,347],{"class":213,"line":346},17,[211,348,236],{"emptyLinePlaceholder":7},[211,350,352],{"class":213,"line":351},18,[211,353,354],{"class":305},"  \u002F\u002F Release the mutex.\n",[211,356,358],{"class":213,"line":357},19,[211,359,360],{"class":242},"  catch (...) {\n",[211,362,364,367,370],{"class":213,"line":363},20,[211,365,366],{"class":242},"    m.",[211,368,369],{"class":258},"unlock",[211,371,262],{"class":242},[211,373,375],{"class":213,"line":374},21,[211,376,377],{"class":242},"    throw;\n",[211,379,381],{"class":213,"line":380},22,[211,382,320],{"class":242},[211,384,386,389,391],{"class":213,"line":385},23,[211,387,388],{"class":242},"  m.",[211,390,369],{"class":258},[211,392,262],{"class":242},[211,394,396],{"class":213,"line":395},24,[211,397,398],{"class":242},"}\n",[211,400,402],{"class":213,"line":401},25,[211,403,236],{"emptyLinePlaceholder":7},[211,405,407,409,412],{"class":213,"line":406},26,[211,408,255],{"class":254},[211,410,411],{"class":258}," start_func",[211,413,278],{"class":242},[211,415,417,420,423,425,428,431],{"class":213,"line":416},27,[211,418,419],{"class":242},"  std::lock_guard",[211,421,422],{"class":217},"\u003C",[211,424,59],{"class":242},[211,426,427],{"class":217},">",[211,429,430],{"class":258}," lock",[211,432,433],{"class":242},"(m);\n",[211,435,437,440],{"class":213,"line":436},28,[211,438,439],{"class":258},"  do_work",[211,441,262],{"class":242},[211,443,445],{"class":213,"line":444},29,[211,446,398],{"class":242},[211,448,450],{"class":213,"line":449},30,[211,451,236],{"emptyLinePlaceholder":7},[211,453,455,458,461],{"class":213,"line":454},31,[211,456,457],{"class":254},"int",[211,459,460],{"class":258}," main",[211,462,278],{"class":242},[211,464,466,469,472],{"class":213,"line":465},32,[211,467,468],{"class":242},"  std::thread ",[211,470,471],{"class":258},"t",[211,473,474],{"class":242},"(start_func);\n",[211,476,478],{"class":213,"line":477},33,[211,479,236],{"emptyLinePlaceholder":7},[211,481,483,485],{"class":213,"line":482},34,[211,484,439],{"class":258},[211,486,262],{"class":242},[211,488,490],{"class":213,"line":489},35,[211,491,236],{"emptyLinePlaceholder":7},[211,493,495,498,501],{"class":213,"line":494},36,[211,496,497],{"class":242},"  t.",[211,499,500],{"class":258},"join",[211,502,262],{"class":242},[211,504,506],{"class":213,"line":505},37,[211,507,398],{"class":242},[179,509,511],{"id":510},"compliant-solution","Compliant Solution",[39,513,514],{},"This compliant solution removes the lock from the thread's initial entry point, allowing the mutex to be speculatively locked, but not recursively.",[198,516,518],{"quality":517},"good",[202,519,521],{"className":204,"code":520,"language":206,"meta":207,"style":207},"#include \u003Cmutex>\n#include \u003Cthread>\n\nstd::mutex m;\n\nvoid do_thread_safe_work();\n\nvoid do_work() {\n  while (!m.try_lock()) {\n    \u002F\u002F The lock is not owned yet, do other work while waiting.\n    do_thread_safe_work();\n  }\n  try {\n    \u002F\u002F The mutex is now locked; perform work on shared resources.\n    \u002F\u002F ...\n\n  \u002F\u002F Release the mutex.\n  catch (...) {\n    m.unlock();\n    throw;\n  }\n  m.unlock();\n}\n\nvoid start_func() {\n  do_work();\n}\n\nint main() {\n  std::thread t(start_func);\n\n  do_work();\n\n  t.join();\n}\n",[49,522,523,529,535,539,543,547,555,559,567,581,585,591,595,599,603,607,611,615,619,627,631,635,643,647,651,659,665,669,673,681,689,693,699,703,711],{"__ignoreMap":207},[211,524,525,527],{"class":213,"line":214},[211,526,218],{"class":217},[211,528,222],{"class":221},[211,530,531,533],{"class":213,"line":225},[211,532,218],{"class":217},[211,534,230],{"class":221},[211,536,537],{"class":213,"line":233},[211,538,236],{"emptyLinePlaceholder":7},[211,540,541],{"class":213,"line":239},[211,542,243],{"class":242},[211,544,545],{"class":213,"line":246},[211,546,236],{"emptyLinePlaceholder":7},[211,548,549,551,553],{"class":213,"line":251},[211,550,255],{"class":254},[211,552,259],{"class":258},[211,554,262],{"class":242},[211,556,557],{"class":213,"line":265},[211,558,236],{"emptyLinePlaceholder":7},[211,560,561,563,565],{"class":213,"line":270},[211,562,255],{"class":254},[211,564,275],{"class":258},[211,566,278],{"class":242},[211,568,569,571,573,575,577,579],{"class":213,"line":281},[211,570,284],{"class":217},[211,572,287],{"class":242},[211,574,290],{"class":217},[211,576,293],{"class":242},[211,578,296],{"class":258},[211,580,299],{"class":242},[211,582,583],{"class":213,"line":302},[211,584,306],{"class":305},[211,586,587,589],{"class":213,"line":309},[211,588,312],{"class":258},[211,590,262],{"class":242},[211,592,593],{"class":213,"line":317},[211,594,320],{"class":242},[211,596,597],{"class":213,"line":323},[211,598,326],{"class":242},[211,600,601],{"class":213,"line":329},[211,602,337],{"class":305},[211,604,605],{"class":213,"line":334},[211,606,343],{"class":305},[211,608,609],{"class":213,"line":340},[211,610,236],{"emptyLinePlaceholder":7},[211,612,613],{"class":213,"line":346},[211,614,354],{"class":305},[211,616,617],{"class":213,"line":351},[211,618,360],{"class":242},[211,620,621,623,625],{"class":213,"line":357},[211,622,366],{"class":242},[211,624,369],{"class":258},[211,626,262],{"class":242},[211,628,629],{"class":213,"line":363},[211,630,377],{"class":242},[211,632,633],{"class":213,"line":374},[211,634,320],{"class":242},[211,636,637,639,641],{"class":213,"line":380},[211,638,388],{"class":242},[211,640,369],{"class":258},[211,642,262],{"class":242},[211,644,645],{"class":213,"line":385},[211,646,398],{"class":242},[211,648,649],{"class":213,"line":395},[211,650,236],{"emptyLinePlaceholder":7},[211,652,653,655,657],{"class":213,"line":401},[211,654,255],{"class":254},[211,656,411],{"class":258},[211,658,278],{"class":242},[211,660,661,663],{"class":213,"line":406},[211,662,439],{"class":258},[211,664,262],{"class":242},[211,666,667],{"class":213,"line":416},[211,668,398],{"class":242},[211,670,671],{"class":213,"line":436},[211,672,236],{"emptyLinePlaceholder":7},[211,674,675,677,679],{"class":213,"line":444},[211,676,457],{"class":254},[211,678,460],{"class":258},[211,680,278],{"class":242},[211,682,683,685,687],{"class":213,"line":449},[211,684,468],{"class":242},[211,686,471],{"class":258},[211,688,474],{"class":242},[211,690,691],{"class":213,"line":454},[211,692,236],{"emptyLinePlaceholder":7},[211,694,695,697],{"class":213,"line":465},[211,696,439],{"class":258},[211,698,262],{"class":242},[211,700,701],{"class":213,"line":477},[211,702,236],{"emptyLinePlaceholder":7},[211,704,705,707,709],{"class":213,"line":482},[211,706,497],{"class":242},[211,708,500],{"class":258},[211,710,262],{"class":242},[211,712,713],{"class":213,"line":489},[211,714,398],{"class":242},[179,716,718],{"id":717},"risk-assessment","Risk Assessment",[39,720,721],{},"Speculatively locking a non-recursive mutex in a recursive manner is undefined behavior that can lead to deadlock.",[723,724,725,726,725,756],"table",{},"\n  ",[727,728,729,730,725],"thead",{},"\n    ",[731,732,733,734,733,738,733,741,733,744,733,747,733,750,733,753,729],"tr",{},"\n      ",[735,736,737],"th",{},"Rule",[735,739,740],{},"Severity",[735,742,743],{},"Likelihood",[735,745,746],{},"Detectable",[735,748,749],{},"Repairable",[735,751,752],{},"Priority",[735,754,755],{},"Level",[757,758,729,759,725],"tbody",{},[731,760,733,761,733,765,733,768,733,771,733,774,733,776,733,783,729],{},[762,763,764],"td",{},"CON56-CPP",[762,766,767],{},"Low",[762,769,770],{},"Unlikely",[762,772,773],{},"No",[762,775,773],{},[762,777,779],{"style":778},"color: #27ae60;",[780,781,782],"b",{},"P1",[762,784,785],{"style":778},[780,786,787],{},"L3",[179,789,791],{"id":790},"automated-detection","Automated Detection",[723,793,798,814,840],{"className":794,"style":797},[795,796],"wrapped","relative-table","width: 73.1169%;",[799,800,801,805,808,811],"colgroup",{},[802,803],"col",{"style":804},"width: 17%",[802,806],{"style":807},"width: 34%",[802,809],{"style":810},"width: 20%",[802,812],{"style":813},"width: 27%",[727,815,816],{},[731,817,820,825,830,835],{"className":818},[819],"header",[735,821,822],{},[39,823,824],{},"Tool",[735,826,827],{},[39,828,829],{},"Version",[735,831,832],{},[39,833,834],{},"Checker",[735,836,837],{},[39,838,839],{},"Description",[757,841,842,873,902,928],{},[731,843,846,852,860,868],{"className":844},[845],"odd",[762,847,848],{},[43,849,851],{"href":850},"\u002Fsei-cert-c-coding-standard\u002Fback-matter\u002Fee-analyzers\u002Fcodesonar","CodeSonar",[762,853,854],{},[855,856,859],"div",{"className":857},[858],"content-wrapper","9.1p0",[762,861,862],{},[39,863,864],{},[865,866,867],"strong",{},"CONCURRENCY.TL",[762,869,870],{},[39,871,872],{},"Try-lock that will never succeed",[731,874,877,883,891,898],{"className":875},[876],"even",[762,878,879],{},[43,880,882],{"href":881},"\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fhelix-qac","Helix QAC",[762,884,885],{},[855,886,888],{"className":887},[858],[39,889,890],{},"2025.2",[762,892,893],{},[39,894,895],{},[865,896,897],{},"C++4986, C++4987",[762,899,900],{},[104,901],{},[731,903,905,911,918,923],{"className":904},[845],[762,906,907],{},[43,908,910],{"href":909},"\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fparasoft","Parasoft C\u002FC++test",[762,912,913],{},[855,914,916],{"className":915},[858],[39,917,890],{},[762,919,920],{},[865,921,922],{},"CERT_CPP-CON56-a",[762,924,925],{},[39,926,927],{},"Avoid double locking",[731,929,931,937,945,951],{"className":930},[876],[762,932,933],{},[43,934,936],{"href":935},"\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fpolyspace-bug-finder","Polyspace Bug Finder",[762,938,939],{},[855,940,942],{"className":941},[858],[39,943,944],{},"R2025b",[762,946,947],{},[43,948,950],{"href":949},"https:\u002F\u002Fwww.mathworks.com\u002Fhelp\u002Fbugfinder\u002Fref\u002Fcertccon56cpp.html","CERT C++: CON56-CPP",[762,952,953],{},[39,954,955],{},"Checks for attempt to lock mutex that is already owned by calling thread (rule fully covered)",[179,957,959],{"id":958},"related-vulnerabilities","Related Vulnerabilities",[39,961,962,963,967,968,157],{},"Search for ",[43,964,966],{"href":965},"\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fbb-definitions#BB.Definitions-vulnerability","vulnerabilities"," resulting from the violation of this rule on the ",[43,969,973],{"href":970,"rel":971},"https:\u002F\u002Fwww.kb.cert.org\u002Fvulnotes\u002Fbymetric?searchview&query=FIELD+KEYWORDS+contains+CON56-CPP",[972],"nofollow","CERT website",[179,975,977],{"id":976},"related-guidelines","Related Guidelines",[723,979,980,988],{},[727,981,982],{},[731,983,984,986],{},[735,985],{},[735,987],{},[757,989,990],{},[731,991,992,999],{},[762,993,994],{},[43,995,998],{"href":996,"rel":997},"http:\u002F\u002Fcwe.mitre.org\u002F",[972],"MITRE CWE",[762,1000,1001,1006],{},[43,1002,1005],{"href":1003,"rel":1004},"http:\u002F\u002Fcwe.mitre.org\u002Fdata\u002Fdefinitions\u002F667.html",[972],"CWE-667"," , Improper Locking",[179,1008,1010],{"id":1009},"bibliography","Bibliography",[723,1012,1013,1021],{},[727,1014,1015],{},[731,1016,1017,1019],{},[735,1018],{},[735,1020],{},[757,1022,1023],{},[731,1024,1025,1031],{},[762,1026,1027,1028,1030],{},"[ ",[43,1029,91],{"href":90}," ]",[762,1032,1033],{},"Subclause 30.4.1, \"Mutex Requirements\"",[1035,1036],"hr",{},[39,1038,1039,1046,1047,1046,1053],{},[43,1040,1042],{"href":1041},"\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fconcurrency-con\u002Fcon55-cpp",[1043,1044],"img",{"src":1045},"\u002Fattachments\u002F87152044\u002F88034188.png"," ",[43,1048,1050],{"href":1049},"\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fconcurrency-con\u002F",[1043,1051],{"src":1052},"\u002Fattachments\u002F87152044\u002F88034190.png",[43,1054,1056],{"href":1055},"\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fmiscellaneous-msc\u002F",[1043,1057],{"src":1058},"\u002Fattachments\u002F87152044\u002F88034189.png",[1060,1061,1062],"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 .sMOD_, html code.shiki .sMOD_{--shiki-default:#24292E;--shiki-dark:#E1E4E8;--shiki-sepia:#F8F8F2}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 .s8-w5, html code.shiki .s8-w5{--shiki-default:#6A737D;--shiki-dark:#6A737D;--shiki-sepia:#88846F}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);}",{"title":207,"searchDepth":225,"depth":225,"links":1064},[1065,1066,1067,1068,1069,1070,1071],{"id":181,"depth":225,"text":182},{"id":510,"depth":225,"text":511},{"id":717,"depth":225,"text":718},{"id":790,"depth":225,"text":791},{"id":958,"depth":225,"text":959},{"id":976,"depth":225,"text":977},{"id":1009,"depth":225,"text":1010},"The C++ Standard Library supplies both recursive and non-recursive mutex classes used to protect critical sections . The recursive mutex classes ( std::recursive_mutex and std::recursive_timed_mutex ) differ from the non-recursive mutex classes ( std::mutex , std::timed_mutex , and std::shared_timed_mutex ) in that a recursive mutex may be locked recursively by the thread that currently owns the mutex. All mutex classes support the ability to speculatively lock the mutex through functions such as try_lock() , try_lock_for() , try_lock_until() , try_lock_shared_for() , and try_lock_shared_until() . These speculative locking functions attempt to obtain ownership of the mutex for the calling thread, but will not block in the event the ownership cannot be obtained. Instead, they return a Boolean value specifying whether the ownership of the mutex was obtained or not.","md",{"tags":1075},[1076,1077,1078,1079,1080,1081,1082,1083,1084,1085],"review","nptc-thread","review-dms","rule","unedited","cwe-667","review-ajb","no-autodetect","nptc","con","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fconcurrency-con\u002Fcon56-cpp",{"title":30,"description":1072},"5.sei-cert-cpp-coding-standard\u002F3.rules\u002F03.concurrency-con\u002F8.con56-cpp","XKGQGHx2CFZOC-Xa8SJRQcGBtTwyMmAjrN6urx1ijHU",[1091,1094],{"title":1092,"path":1041,"stem":1093,"children":-1},"CON55-CPP. Preserve thread safety and liveness when using condition variables","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F03.concurrency-con\u002F7.con55-cpp",{"title":1095,"path":1096,"stem":1097,"children":-1},"Containers (CTR)","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fcontainers-ctr","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F04.containers-ctr\u002F01.index",[1099],{"title":1100,"path":1101,"stem":1102,"children":1103},"SEI CERT C++ Coding Standard","\u002Fsei-cert-cpp-coding-standard","5.sei-cert-cpp-coding-standard\u002F1.index",[1104,1105,1172,1567,1786,1796],{"title":1100,"path":1101,"stem":1102},{"title":1106,"path":1107,"stem":1108,"children":1109},"Front Matter","\u002Fsei-cert-cpp-coding-standard\u002Ffront-matter","5.sei-cert-cpp-coding-standard\u002F2.front-matter\u002F1.index",[1110,1111],{"title":1106,"path":1107,"stem":1108},{"title":1112,"path":1113,"stem":1114,"children":1115},"Introduction","\u002Fsei-cert-cpp-coding-standard\u002Ffront-matter\u002Fintroduction","5.sei-cert-cpp-coding-standard\u002F2.front-matter\u002F2.introduction\u002F01.index",[1116,1117,1121,1125,1129,1133,1137,1141,1145,1149,1153,1157,1161,1165,1169],{"title":1112,"path":1113,"stem":1114},{"title":1118,"path":1119,"stem":1120},"Scope","\u002Fsei-cert-cpp-coding-standard\u002Ffront-matter\u002Fintroduction\u002Fscope","5.sei-cert-cpp-coding-standard\u002F2.front-matter\u002F2.introduction\u002F02.scope",{"title":1122,"path":1123,"stem":1124},"Audience","\u002Fsei-cert-cpp-coding-standard\u002Ffront-matter\u002Fintroduction\u002Faudience","5.sei-cert-cpp-coding-standard\u002F2.front-matter\u002F2.introduction\u002F03.audience",{"title":1126,"path":1127,"stem":1128},"Usage","\u002Fsei-cert-cpp-coding-standard\u002Ffront-matter\u002Fintroduction\u002Fusage","5.sei-cert-cpp-coding-standard\u002F2.front-matter\u002F2.introduction\u002F04.usage",{"title":1130,"path":1131,"stem":1132},"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":1134,"path":1135,"stem":1136},"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":1138,"path":1139,"stem":1140},"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":1142,"path":1143,"stem":1144},"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":1146,"path":1147,"stem":1148},"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":1150,"path":1151,"stem":1152},"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":1154,"path":1155,"stem":1156},"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":1158,"path":1159,"stem":1160},"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":1162,"path":1163,"stem":1164},"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":1166,"path":1167,"stem":1168},"Acknowledgments","\u002Fsei-cert-cpp-coding-standard\u002Ffront-matter\u002Fintroduction\u002Facknowledgments","5.sei-cert-cpp-coding-standard\u002F2.front-matter\u002F2.introduction\u002F14.acknowledgments",{"title":791,"path":1170,"stem":1171},"\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":1173,"path":1174,"stem":1175,"children":1176},"Rules","\u002Fsei-cert-cpp-coding-standard\u002Frules","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F01.index",[1177,1178,1200,1228,1267,1317,1375,1437,1451,1461,1499,1525],{"title":1173,"path":1174,"stem":1175},{"title":1179,"path":1180,"stem":1181,"children":1182},"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",[1183,1184,1188,1192,1196],{"title":1179,"path":1180,"stem":1181},{"title":1185,"path":1186,"stem":1187},"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":1189,"path":1190,"stem":1191},"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":1193,"path":1194,"stem":1195},"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":1197,"path":1198,"stem":1199},"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":1201,"path":1202,"stem":1203,"children":1204},"Concurrency (CON)","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fconcurrency-con","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F03.concurrency-con\u002F1.index",[1205,1206,1210,1214,1218,1222,1226,1227],{"title":1201,"path":1202,"stem":1203},{"title":1207,"path":1208,"stem":1209},"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":1211,"path":1212,"stem":1213},"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":1215,"path":1216,"stem":1217},"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":1219,"path":1220,"stem":1221},"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":1223,"path":1224,"stem":1225},"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":1092,"path":1041,"stem":1093},{"title":30,"path":1086,"stem":1088},{"title":1095,"path":1096,"stem":1097,"children":1229},[1230,1231,1235,1239,1243,1247,1251,1255,1259,1263],{"title":1095,"path":1096,"stem":1097},{"title":1232,"path":1233,"stem":1234},"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":1236,"path":1237,"stem":1238},"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":1240,"path":1241,"stem":1242},"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":1244,"path":1245,"stem":1246},"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":1248,"path":1249,"stem":1250},"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":1252,"path":1253,"stem":1254},"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":1256,"path":1257,"stem":1258},"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":1260,"path":1261,"stem":1262},"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":1264,"path":1265,"stem":1266},"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":1268,"path":1269,"stem":1270,"children":1271},"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",[1272,1273,1277,1281,1285,1289,1293,1297,1301,1305,1309,1313],{"title":1268,"path":1269,"stem":1270},{"title":1274,"path":1275,"stem":1276},"DCL50-CPP. Do not define a C-style variadic function","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fdeclarations-and-initialization-dcl\u002Fdcl50-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F05.declarations-and-initialization-dcl\u002F02.dcl50-cpp",{"title":1278,"path":1279,"stem":1280},"DCL51-CPP. Do not declare or define a reserved identifier","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fdeclarations-and-initialization-dcl\u002Fdcl51-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F05.declarations-and-initialization-dcl\u002F03.dcl51-cpp",{"title":1282,"path":1283,"stem":1284},"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":1286,"path":1287,"stem":1288},"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":1290,"path":1291,"stem":1292},"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":1294,"path":1295,"stem":1296},"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":1298,"path":1299,"stem":1300},"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":1302,"path":1303,"stem":1304},"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":1306,"path":1307,"stem":1308},"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":1310,"path":1311,"stem":1312},"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":1314,"path":1315,"stem":1316},"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":1318,"path":1319,"stem":1320,"children":1321},"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",[1322,1323,1327,1331,1335,1339,1343,1347,1351,1355,1359,1363,1367,1371],{"title":1318,"path":1319,"stem":1320},{"title":1324,"path":1325,"stem":1326},"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":1328,"path":1329,"stem":1330},"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":1332,"path":1333,"stem":1334},"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":1336,"path":1337,"stem":1338},"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":1340,"path":1341,"stem":1342},"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":1344,"path":1345,"stem":1346},"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":1348,"path":1349,"stem":1350},"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":1352,"path":1353,"stem":1354},"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":1356,"path":1357,"stem":1358},"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":1360,"path":1361,"stem":1362},"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":1364,"path":1365,"stem":1366},"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":1368,"path":1369,"stem":1370},"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":1372,"path":1373,"stem":1374},"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":1376,"path":1377,"stem":1378,"children":1379},"Expressions (EXP)","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexpressions-exp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F07.expressions-exp\u002F01.index",[1380,1381,1385,1389,1393,1397,1401,1405,1409,1413,1417,1421,1425,1429,1433],{"title":1376,"path":1377,"stem":1378},{"title":1382,"path":1383,"stem":1384},"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":1386,"path":1387,"stem":1388},"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":1390,"path":1391,"stem":1392},"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":1394,"path":1395,"stem":1396},"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":1398,"path":1399,"stem":1400},"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":1402,"path":1403,"stem":1404},"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":1406,"path":1407,"stem":1408},"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":1410,"path":1411,"stem":1412},"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":1414,"path":1415,"stem":1416},"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":1418,"path":1419,"stem":1420},"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":1422,"path":1423,"stem":1424},"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":1426,"path":1427,"stem":1428},"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":1430,"path":1431,"stem":1432},"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":1434,"path":1435,"stem":1436},"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":1438,"path":1439,"stem":1440,"children":1441},"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",[1442,1443,1447],{"title":1438,"path":1439,"stem":1440},{"title":1444,"path":1445,"stem":1446},"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":1448,"path":1449,"stem":1450},"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":1452,"path":1453,"stem":1454,"children":1455},"Integers (INT)","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fintegers-int","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F09.integers-int\u002F1.index",[1456,1457],{"title":1452,"path":1453,"stem":1454},{"title":1458,"path":1459,"stem":1460},"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":1462,"path":1463,"stem":1464,"children":1465},"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",[1466,1467,1471,1475,1479,1483,1487,1491,1495],{"title":1462,"path":1463,"stem":1464},{"title":1468,"path":1469,"stem":1470},"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":1472,"path":1473,"stem":1474},"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":1476,"path":1477,"stem":1478},"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":1480,"path":1481,"stem":1482},"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":1484,"path":1485,"stem":1486},"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":1488,"path":1489,"stem":1490},"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":1492,"path":1493,"stem":1494},"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":1496,"path":1497,"stem":1498},"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":1500,"path":1501,"stem":1502,"children":1503},"Miscellaneous (MSC)","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fmiscellaneous-msc","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F11.miscellaneous-msc\u002F1.index",[1504,1505,1509,1513,1517,1521],{"title":1500,"path":1501,"stem":1502},{"title":1506,"path":1507,"stem":1508},"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":1510,"path":1511,"stem":1512},"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":1514,"path":1515,"stem":1516},"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":1518,"path":1519,"stem":1520},"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":1522,"path":1523,"stem":1524},"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":1526,"path":1527,"stem":1528,"children":1529},"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",[1530,1531,1535,1539,1543,1547,1551,1555,1559,1563],{"title":1526,"path":1527,"stem":1528},{"title":1532,"path":1533,"stem":1534},"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":1536,"path":1537,"stem":1538},"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":1540,"path":1541,"stem":1542},"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":1544,"path":1545,"stem":1546},"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":1548,"path":1549,"stem":1550},"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":1552,"path":1553,"stem":1554},"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":1556,"path":1557,"stem":1558},"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":1560,"path":1561,"stem":1562},"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":1564,"path":1565,"stem":1566},"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":1568,"path":1569,"stem":1570,"children":1571},"Back Matter","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F1.index",[1572,1573,1577,1581,1769,1782],{"title":1568,"path":1569,"stem":1570},{"title":1574,"path":1575,"stem":1576},"AA. Bibliography","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Faa-bibliography","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F2.aa-bibliography",{"title":1578,"path":1579,"stem":1580},"BB. Definitions","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fbb-definitions","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F3.bb-definitions",{"title":1582,"path":1583,"stem":1584,"children":1585},"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",[1586,1587,1591,1595,1599,1603,1607,1611,1615,1619,1623,1627,1631,1634,1638,1642,1646,1650,1654,1658,1662,1666,1670,1672,1676,1680,1684,1688,1692,1695,1699,1701,1705,1709,1713,1717,1721,1725,1729,1733,1737,1741,1745,1749,1753,1757,1761,1765],{"title":1582,"path":1583,"stem":1584},{"title":1588,"path":1589,"stem":1590},"Astrée","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fastree","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F02.astree",{"title":1592,"path":1593,"stem":1594},"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":1596,"path":1597,"stem":1598},"Axivion Bauhaus Suite","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Faxivion-bauhaus-suite","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F04.axivion-bauhaus-suite",{"title":1600,"path":1601,"stem":1602},"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":1604,"path":1605,"stem":1606},"Clang","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fclang","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F06.clang",{"title":1608,"path":1609,"stem":1610},"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":1612,"path":1613,"stem":1614},"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":1616,"path":1617,"stem":1618},"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":1620,"path":1621,"stem":1622},"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":1624,"path":1625,"stem":1626},"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":1628,"path":1629,"stem":1630},"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":851,"path":1632,"stem":1633},"\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fcodesonar","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F13.codesonar",{"title":1635,"path":1636,"stem":1637},"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":1639,"path":1640,"stem":1641},"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":1643,"path":1644,"stem":1645},"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":1647,"path":1648,"stem":1649},"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":1651,"path":1652,"stem":1653},"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":1655,"path":1656,"stem":1657},"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":1659,"path":1660,"stem":1661},"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":1663,"path":1664,"stem":1665},"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":1667,"path":1668,"stem":1669},"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":882,"path":881,"stem":1671},"5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F23.helix-qac",{"title":1673,"path":1674,"stem":1675},"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":1677,"path":1678,"stem":1679},"Klocwork","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fklocwork","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F25.klocwork",{"title":1681,"path":1682,"stem":1683},"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":1685,"path":1686,"stem":1687},"LDRA","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fldra","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F27.ldra",{"title":1689,"path":1690,"stem":1691},"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":1693,"path":909,"stem":1694},"Parasoft","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F29.parasoft",{"title":1696,"path":1697,"stem":1698},"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":936,"path":935,"stem":1700},"5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F31.polyspace-bug-finder",{"title":1702,"path":1703,"stem":1704},"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":1706,"path":1707,"stem":1708},"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":1710,"path":1711,"stem":1712},"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":1714,"path":1715,"stem":1716},"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":1718,"path":1719,"stem":1720},"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":1722,"path":1723,"stem":1724},"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":1726,"path":1727,"stem":1728},"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":1730,"path":1731,"stem":1732},"RuleChecker","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Frulechecker","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F39.rulechecker",{"title":1734,"path":1735,"stem":1736},"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":1738,"path":1739,"stem":1740},"Security Reviewer - Static Reviewer","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fsecurity-reviewer-static-reviewer","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F41.security-reviewer-static-reviewer",{"title":1742,"path":1743,"stem":1744},"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":1746,"path":1747,"stem":1748},"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":1750,"path":1751,"stem":1752},"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":1754,"path":1755,"stem":1756},"SonarQube C\u002FC++ Plugin","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fsonarqube-ccpp-plugin","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F45.sonarqube-ccpp-plugin",{"title":1758,"path":1759,"stem":1760},"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":1762,"path":1763,"stem":1764},"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":1766,"path":1767,"stem":1768},"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":1770,"path":1771,"stem":1772,"children":1773},"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",[1774,1775,1779],{"title":1770,"path":1771,"stem":1772},{"title":1776,"path":1777,"stem":1778},"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":998,"path":1780,"stem":1781},"\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":1783,"path":1784,"stem":1785},"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":1787,"path":1788,"stem":1789,"children":1790},"Admin","\u002Fsei-cert-cpp-coding-standard\u002Fadmin","5.sei-cert-cpp-coding-standard\u002F5.admin\u002F1.index",[1791,1792],{"title":1787,"path":1788,"stem":1789},{"title":1793,"path":1794,"stem":1795},"TODO List","\u002Fsei-cert-cpp-coding-standard\u002Fadmin\u002Ftodo-list","5.sei-cert-cpp-coding-standard\u002F5.admin\u002F2.todo-list",{"title":1797,"path":1798,"stem":1799},"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",1775657778742]