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