[{"data":1,"prerenderedAt":2226},["ShallowReactive",2],{"global-navigation":3,"page-\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fobject-oriented-programming-oop\u002Foop55-cpp":28,"surround-\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fobject-oriented-programming-oop\u002Foop55-cpp":1523,"sidebar-sei-cert-cpp-coding-standard":1530},[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":1507,"extension":1508,"meta":1509,"navigation":7,"path":1519,"seo":1520,"stem":1521,"__hash__":1522},"content\u002F5.sei-cert-cpp-coding-standard\u002F3.rules\u002F12.object-oriented-programming-oop\u002F07.oop55-cpp.md","OOP55-CPP. Do not use pointer-to-member operators to access nonexistent members",{"type":32,"value":33,"toc":1496},"minimark",[34,38,59,191,224,233,263,278,281,286,289,294,315,530,534,546,715,718,723,904,907,917,1091,1095,1161,1165,1409,1413,1427,1431,1440,1444,1467,1470,1492],[35,36,30],"h1",{"id":37},"oop55-cpp-do-not-use-pointer-to-member-operators-to-access-nonexistent-members",[39,40,41,42,46,47,50,51,54,55,58],"p",{},"The pointer-to-member operators ",[43,44,45],"code",{},".*"," and ",[43,48,49],{},"->*"," are used to obtain an object or a function as though it were a member of an underlying object. For instance, the following are functionally equivalent ways to call the member function ",[43,52,53],{},"f()"," on the object ",[43,56,57],{},"o"," .",[60,61,66],"pre",{"className":62,"code":63,"language":64,"meta":65,"style":65},"language-java shiki shiki-themes github-light github-dark monokai","struct S {\n  void f() {}\n};\n\nvoid func() {\n  S o;\n  void (S::*pm)() = &S::f;\n  \n  o.f();\n  (o.*pm)();\n}\n","java","",[43,67,68,77,91,97,103,115,125,155,161,173,185],{"__ignoreMap":65},[69,70,73],"span",{"class":71,"line":72},"line",1,[69,74,76],{"class":75},"sMOD_","struct S {\n",[69,78,80,84,88],{"class":71,"line":79},2,[69,81,83],{"class":82},"sq6CD","  void",[69,85,87],{"class":86},"srTi1"," f",[69,89,90],{"class":75},"() {}\n",[69,92,94],{"class":71,"line":93},3,[69,95,96],{"class":75},"};\n",[69,98,100],{"class":71,"line":99},4,[69,101,102],{"emptyLinePlaceholder":7},"\n",[69,104,106,109,112],{"class":71,"line":105},5,[69,107,108],{"class":82},"void",[69,110,111],{"class":86}," func",[69,113,114],{"class":75},"() {\n",[69,116,118,122],{"class":71,"line":117},6,[69,119,121],{"class":120},"sk8M1","  S",[69,123,124],{"class":75}," o;\n",[69,126,128,130,133,137,140,143,146,149,152],{"class":71,"line":127},7,[69,129,83],{"class":86},[69,131,132],{"class":75}," (S",[69,134,136],{"class":135},"sC2Qs","::*",[69,138,139],{"class":75},"pm)() ",[69,141,142],{"class":135},"=",[69,144,145],{"class":135}," &",[69,147,148],{"class":75},"S",[69,150,151],{"class":135},"::",[69,153,154],{"class":75},"f;\n",[69,156,158],{"class":71,"line":157},8,[69,159,160],{"class":75},"  \n",[69,162,164,167,170],{"class":71,"line":163},9,[69,165,166],{"class":75},"  o.",[69,168,169],{"class":86},"f",[69,171,172],{"class":75},"();\n",[69,174,176,179,182],{"class":71,"line":175},10,[69,177,178],{"class":75},"  (o.",[69,180,181],{"class":135},"*",[69,183,184],{"class":75},"pm)();\n",[69,186,188],{"class":71,"line":187},11,[69,189,190],{"class":75},"}\n",[39,192,193,194,197,198,54,201,203,204,207,208,210,211,214,215,217,218,221,222,58],{},"The call of the form ",[43,195,196],{},"o.f()"," uses class member access at compile time to look up the address of the function ",[43,199,200],{},"S::f()",[43,202,57],{}," . The call of the form ",[43,205,206],{},"(o.*pm)()"," uses the pointer-to-member operator ",[43,209,45],{}," to call the function at the address specified by ",[43,212,213],{},"pm"," . In both cases, the object ",[43,216,57],{}," is the implicit ",[43,219,220],{},"this"," object within the member function ",[43,223,200],{},[39,225,226,227,232],{},"The C++ Standard, [expr.mptr.oper], paragraph 4 [ ",[228,229,231],"a",{"href":230},"\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Faa-bibliography#AA.Bibliography-ISO\u002FIEC14882-2014","ISO\u002FIEC 14882-2014"," ] , states the following :",[234,235,236],"blockquote",{},[39,237,238,239,243,244,247,248,251,252,255,256,258,259,262],{},"Abbreviating ",[240,241,242],"em",{},"pm-expression.*cast-expression"," as ",[43,245,246],{},"E1.*E2"," , ",[43,249,250],{},"E1"," is called the ",[240,253,254],{},"object expression"," . If the dynamic type of ",[43,257,250],{}," does not contain the member to which ",[43,260,261],{},"E2"," refers, the behavior is undefined.",[39,264,265,266,269,270,273,274,58],{},"A pointer-to-member expression of the form ",[43,267,268],{},"E1->*E2"," is converted to its equivalent form, ",[43,271,272],{},"(*(E1)).*E2"," , so use of pointer-to-member expressions of either form behave equivalently in terms of ",[228,275,277],{"href":276},"\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fbb-definitions#BB.Definitions-undefinedbehavior","undefined behavior",[39,279,280],{},"Further, the C++ Standard, [expr.mptr.oper], paragraph 6, in part, states the following:",[234,282,283],{},[39,284,285],{},"If the second operand is the null pointer to member value, the behavior is undefined.",[39,287,288],{},"Do not use a pointer-to-member expression where the dynamic type of the first operand does not contain the member to which the second operand refers, including the use of a null pointer-to-member value as the second operand.",[290,291,293],"h2",{"id":292},"noncompliant-code-example","Noncompliant Code Example",[39,295,296,297,300,301,304,305,308,309,312,313,58],{},"In this noncompliant code example, a pointer-to-member object is obtained from ",[43,298,299],{},"D::g"," but is then upcast to be a ",[43,302,303],{},"B::*"," . When called on an object whose dynamic type is ",[43,306,307],{},"D"," , the pointer-to-member call is well defined. However, the dynamic type of the underlying object is ",[43,310,311],{},"B"," , which results in ",[228,314,277],{"href":276},[316,317,319],"code-block",{"quality":318},"bad",[60,320,324],{"className":321,"code":322,"language":323,"meta":65,"style":65},"language-cpp shiki shiki-themes github-light github-dark monokai","struct B {\n  virtual ~B() = default;\n};\n\nstruct D : B {\n  virtual ~D() = default;\n  virtual void g() { \u002F* ... *\u002F }\n};\n\nvoid f() {\n  B *b = new B;\n \n  \u002F\u002F ...\n \n  void (B::*gptr)() = static_cast\u003Cvoid(B::*)()>(&D::g);\n  (b->*gptr)();\n  delete b;\n}\n","cpp",[43,325,326,338,357,361,365,375,390,410,414,418,426,444,450,456,461,510,516,525],{"__ignoreMap":65},[69,327,328,331,335],{"class":71,"line":72},[69,329,330],{"class":82},"struct",[69,332,334],{"class":333},"sz2Vg"," B",[69,336,337],{"class":75}," {\n",[69,339,340,343,346,349,351,354],{"class":71,"line":79},[69,341,342],{"class":135},"  virtual",[69,344,345],{"class":86}," ~B",[69,347,348],{"class":75},"() ",[69,350,142],{"class":135},[69,352,353],{"class":135}," default",[69,355,356],{"class":75},";\n",[69,358,359],{"class":71,"line":93},[69,360,96],{"class":75},[69,362,363],{"class":71,"line":99},[69,364,102],{"emptyLinePlaceholder":7},[69,366,367,369,372],{"class":71,"line":105},[69,368,330],{"class":82},[69,370,371],{"class":333}," D",[69,373,374],{"class":75}," : B {\n",[69,376,377,379,382,384,386,388],{"class":71,"line":117},[69,378,342],{"class":135},[69,380,381],{"class":86}," ~D",[69,383,348],{"class":75},[69,385,142],{"class":135},[69,387,353],{"class":135},[69,389,356],{"class":75},[69,391,392,394,397,400,403,407],{"class":71,"line":127},[69,393,342],{"class":135},[69,395,396],{"class":82}," void",[69,398,399],{"class":86}," g",[69,401,402],{"class":75},"() {",[69,404,406],{"class":405},"s8-w5"," \u002F* ... *\u002F",[69,408,409],{"class":75}," }\n",[69,411,412],{"class":71,"line":157},[69,413,96],{"class":75},[69,415,416],{"class":71,"line":163},[69,417,102],{"emptyLinePlaceholder":7},[69,419,420,422,424],{"class":71,"line":175},[69,421,108],{"class":82},[69,423,87],{"class":86},[69,425,114],{"class":75},[69,427,428,431,433,436,438,441],{"class":71,"line":187},[69,429,430],{"class":75},"  B ",[69,432,181],{"class":135},[69,434,435],{"class":75},"b ",[69,437,142],{"class":135},[69,439,440],{"class":135}," new",[69,442,443],{"class":75}," B;\n",[69,445,447],{"class":71,"line":446},12,[69,448,449],{"class":75}," \n",[69,451,453],{"class":71,"line":452},13,[69,454,455],{"class":405},"  \u002F\u002F ...\n",[69,457,459],{"class":71,"line":458},14,[69,460,449],{"class":75},[69,462,464,466,469,471,473,475,478,480,483,485,488,490,492,494,497,500,502,505,507],{"class":71,"line":463},15,[69,465,83],{"class":82},[69,467,468],{"class":75}," (",[69,470,311],{"class":333},[69,472,151],{"class":75},[69,474,181],{"class":135},[69,476,477],{"class":75},"gptr)() ",[69,479,142],{"class":135},[69,481,482],{"class":135}," static_cast\u003C",[69,484,108],{"class":82},[69,486,487],{"class":75},"(",[69,489,311],{"class":333},[69,491,151],{"class":75},[69,493,181],{"class":135},[69,495,496],{"class":75},")()",[69,498,499],{"class":135},">",[69,501,487],{"class":75},[69,503,504],{"class":135},"&",[69,506,307],{"class":333},[69,508,509],{"class":75},"::g);\n",[69,511,513],{"class":71,"line":512},16,[69,514,515],{"class":75},"  (b->*gptr)();\n",[69,517,519,522],{"class":71,"line":518},17,[69,520,521],{"class":135},"  delete",[69,523,524],{"class":75}," b;\n",[69,526,528],{"class":71,"line":527},18,[69,529,190],{"class":75},[290,531,533],{"id":532},"compliant-solution","Compliant Solution",[39,535,536,537,541,542,545],{},"In this compliant solution, the upcast is removed, rendering the initial code ",[228,538,540],{"href":539},"\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fbb-definitions#BB.Definitions-ill-formed","ill-formed"," and emphasizing the underlying problem that ",[43,543,544],{},"B::g()"," does not exist. This compliant solution assumes that the programmer's intention was to use the correct dynamic type for the underlying object.",[316,547,549],{"quality":548},"good",[60,550,552],{"className":321,"code":551,"language":323,"meta":65,"style":65},"struct B {\n  virtual ~B() = default;\n};\n\nstruct D : B {\n  virtual ~D() = default;\n  virtual void g() { \u002F* ... *\u002F }\n};\n\nvoid f() {\n  B *b = new D; \u002F\u002F Corrected the dynamic object type.\n \n  \u002F\u002F ...\n  void (D::*gptr)() = &D::g; \u002F\u002F Moved static_cast to the next line.\n  (static_cast\u003CD *>(b)->*gptr)();\n  delete b;\n}\n",[43,553,554,562,576,580,584,592,606,620,624,628,636,654,658,662,688,705,711],{"__ignoreMap":65},[69,555,556,558,560],{"class":71,"line":72},[69,557,330],{"class":82},[69,559,334],{"class":333},[69,561,337],{"class":75},[69,563,564,566,568,570,572,574],{"class":71,"line":79},[69,565,342],{"class":135},[69,567,345],{"class":86},[69,569,348],{"class":75},[69,571,142],{"class":135},[69,573,353],{"class":135},[69,575,356],{"class":75},[69,577,578],{"class":71,"line":93},[69,579,96],{"class":75},[69,581,582],{"class":71,"line":99},[69,583,102],{"emptyLinePlaceholder":7},[69,585,586,588,590],{"class":71,"line":105},[69,587,330],{"class":82},[69,589,371],{"class":333},[69,591,374],{"class":75},[69,593,594,596,598,600,602,604],{"class":71,"line":117},[69,595,342],{"class":135},[69,597,381],{"class":86},[69,599,348],{"class":75},[69,601,142],{"class":135},[69,603,353],{"class":135},[69,605,356],{"class":75},[69,607,608,610,612,614,616,618],{"class":71,"line":127},[69,609,342],{"class":135},[69,611,396],{"class":82},[69,613,399],{"class":86},[69,615,402],{"class":75},[69,617,406],{"class":405},[69,619,409],{"class":75},[69,621,622],{"class":71,"line":157},[69,623,96],{"class":75},[69,625,626],{"class":71,"line":163},[69,627,102],{"emptyLinePlaceholder":7},[69,629,630,632,634],{"class":71,"line":175},[69,631,108],{"class":82},[69,633,87],{"class":86},[69,635,114],{"class":75},[69,637,638,640,642,644,646,648,651],{"class":71,"line":187},[69,639,430],{"class":75},[69,641,181],{"class":135},[69,643,435],{"class":75},[69,645,142],{"class":135},[69,647,440],{"class":135},[69,649,650],{"class":75}," D;",[69,652,653],{"class":405}," \u002F\u002F Corrected the dynamic object type.\n",[69,655,656],{"class":71,"line":446},[69,657,449],{"class":75},[69,659,660],{"class":71,"line":452},[69,661,455],{"class":405},[69,663,664,666,668,670,672,674,676,678,680,682,685],{"class":71,"line":458},[69,665,83],{"class":82},[69,667,468],{"class":75},[69,669,307],{"class":333},[69,671,151],{"class":75},[69,673,181],{"class":135},[69,675,477],{"class":75},[69,677,142],{"class":135},[69,679,145],{"class":135},[69,681,307],{"class":333},[69,683,684],{"class":75},"::g;",[69,686,687],{"class":405}," \u002F\u002F Moved static_cast to the next line.\n",[69,689,690,693,696,699,702],{"class":71,"line":463},[69,691,692],{"class":75},"  (",[69,694,695],{"class":135},"static_cast\u003C",[69,697,698],{"class":75},"D ",[69,700,701],{"class":135},"*>",[69,703,704],{"class":75},"(b)->*gptr)();\n",[69,706,707,709],{"class":71,"line":512},[69,708,521],{"class":135},[69,710,524],{"class":75},[69,712,713],{"class":71,"line":518},[69,714,190],{"class":75},[290,716,293],{"id":717},"noncompliant-code-example-1",[39,719,720,721,58],{},"In this noncompliant code example, a null pointer-to-member value is passed as the second operand to a pointer-to-member expression, resulting in ",[228,722,277],{"href":276},[316,724,725],{"quality":318},[60,726,728],{"className":321,"code":727,"language":323,"meta":65,"style":65},"struct B {\n  virtual ~B() = default;\n};\n\nstruct D : B {\n  virtual ~D() = default;\n  virtual void g() { \u002F* ... *\u002F }\n};\n \nstatic void (D::*gptr)(); \u002F\u002F Not explicitly initialized, defaults to nullptr.\nvoid call_memptr(D *ptr) {\n  (ptr->*gptr)();\n}\n \nvoid f() {\n  D *d = new D;\n  call_memptr(d);\n  delete d;\n}\n",[43,729,730,738,752,756,760,768,782,796,800,804,825,846,851,855,859,867,884,892,899],{"__ignoreMap":65},[69,731,732,734,736],{"class":71,"line":72},[69,733,330],{"class":82},[69,735,334],{"class":333},[69,737,337],{"class":75},[69,739,740,742,744,746,748,750],{"class":71,"line":79},[69,741,342],{"class":135},[69,743,345],{"class":86},[69,745,348],{"class":75},[69,747,142],{"class":135},[69,749,353],{"class":135},[69,751,356],{"class":75},[69,753,754],{"class":71,"line":93},[69,755,96],{"class":75},[69,757,758],{"class":71,"line":99},[69,759,102],{"emptyLinePlaceholder":7},[69,761,762,764,766],{"class":71,"line":105},[69,763,330],{"class":82},[69,765,371],{"class":333},[69,767,374],{"class":75},[69,769,770,772,774,776,778,780],{"class":71,"line":117},[69,771,342],{"class":135},[69,773,381],{"class":86},[69,775,348],{"class":75},[69,777,142],{"class":135},[69,779,353],{"class":135},[69,781,356],{"class":75},[69,783,784,786,788,790,792,794],{"class":71,"line":127},[69,785,342],{"class":135},[69,787,396],{"class":82},[69,789,399],{"class":86},[69,791,402],{"class":75},[69,793,406],{"class":405},[69,795,409],{"class":75},[69,797,798],{"class":71,"line":157},[69,799,96],{"class":75},[69,801,802],{"class":71,"line":163},[69,803,449],{"class":75},[69,805,806,809,811,813,815,817,819,822],{"class":71,"line":175},[69,807,808],{"class":135},"static",[69,810,396],{"class":82},[69,812,468],{"class":75},[69,814,307],{"class":333},[69,816,151],{"class":75},[69,818,181],{"class":135},[69,820,821],{"class":75},"gptr)();",[69,823,824],{"class":405}," \u002F\u002F Not explicitly initialized, defaults to nullptr.\n",[69,826,827,829,832,834,836,839,843],{"class":71,"line":187},[69,828,108],{"class":82},[69,830,831],{"class":86}," call_memptr",[69,833,487],{"class":75},[69,835,307],{"class":333},[69,837,838],{"class":135}," *",[69,840,842],{"class":841},"sTHNf","ptr",[69,844,845],{"class":75},") {\n",[69,847,848],{"class":71,"line":446},[69,849,850],{"class":75},"  (ptr->*gptr)();\n",[69,852,853],{"class":71,"line":452},[69,854,190],{"class":75},[69,856,857],{"class":71,"line":458},[69,858,449],{"class":75},[69,860,861,863,865],{"class":71,"line":463},[69,862,108],{"class":82},[69,864,87],{"class":86},[69,866,114],{"class":75},[69,868,869,872,874,877,879,881],{"class":71,"line":512},[69,870,871],{"class":75},"  D ",[69,873,181],{"class":135},[69,875,876],{"class":75},"d ",[69,878,142],{"class":135},[69,880,440],{"class":135},[69,882,883],{"class":75}," D;\n",[69,885,886,889],{"class":71,"line":518},[69,887,888],{"class":86},"  call_memptr",[69,890,891],{"class":75},"(d);\n",[69,893,894,896],{"class":71,"line":527},[69,895,521],{"class":135},[69,897,898],{"class":75}," d;\n",[69,900,902],{"class":71,"line":901},19,[69,903,190],{"class":75},[290,905,533],{"id":906},"compliant-solution-1",[39,908,909,910,913,914,58],{},"In this compliant solution, ",[43,911,912],{},"gptr"," is properly initialized to a valid pointer-to-member value instead of to the default value of ",[43,915,916],{},"nullptr",[316,918,919],{"quality":548},[60,920,922],{"className":321,"code":921,"language":323,"meta":65,"style":65},"struct B {\n  virtual ~B() = default;\n};\n \nstruct D : B {\n  virtual ~D() = default;\n  virtual void g() { \u002F* ... *\u002F }\n};\n \nstatic void (D::*gptr)() = &D::g; \u002F\u002F Explicitly initialized.\nvoid call_memptr(D *ptr) {\n  (ptr->*gptr)();\n}\n \nvoid f() {\n  D *d = new D;\n  call_memptr(d);\n  delete d;\n}\n",[43,923,924,932,946,950,954,962,976,990,994,998,1025,1041,1045,1049,1053,1061,1075,1081,1087],{"__ignoreMap":65},[69,925,926,928,930],{"class":71,"line":72},[69,927,330],{"class":82},[69,929,334],{"class":333},[69,931,337],{"class":75},[69,933,934,936,938,940,942,944],{"class":71,"line":79},[69,935,342],{"class":135},[69,937,345],{"class":86},[69,939,348],{"class":75},[69,941,142],{"class":135},[69,943,353],{"class":135},[69,945,356],{"class":75},[69,947,948],{"class":71,"line":93},[69,949,96],{"class":75},[69,951,952],{"class":71,"line":99},[69,953,449],{"class":75},[69,955,956,958,960],{"class":71,"line":105},[69,957,330],{"class":82},[69,959,371],{"class":333},[69,961,374],{"class":75},[69,963,964,966,968,970,972,974],{"class":71,"line":117},[69,965,342],{"class":135},[69,967,381],{"class":86},[69,969,348],{"class":75},[69,971,142],{"class":135},[69,973,353],{"class":135},[69,975,356],{"class":75},[69,977,978,980,982,984,986,988],{"class":71,"line":127},[69,979,342],{"class":135},[69,981,396],{"class":82},[69,983,399],{"class":86},[69,985,402],{"class":75},[69,987,406],{"class":405},[69,989,409],{"class":75},[69,991,992],{"class":71,"line":157},[69,993,96],{"class":75},[69,995,996],{"class":71,"line":163},[69,997,449],{"class":75},[69,999,1000,1002,1004,1006,1008,1010,1012,1014,1016,1018,1020,1022],{"class":71,"line":175},[69,1001,808],{"class":135},[69,1003,396],{"class":82},[69,1005,468],{"class":75},[69,1007,307],{"class":333},[69,1009,151],{"class":75},[69,1011,181],{"class":135},[69,1013,477],{"class":75},[69,1015,142],{"class":135},[69,1017,145],{"class":135},[69,1019,307],{"class":333},[69,1021,684],{"class":75},[69,1023,1024],{"class":405}," \u002F\u002F Explicitly initialized.\n",[69,1026,1027,1029,1031,1033,1035,1037,1039],{"class":71,"line":187},[69,1028,108],{"class":82},[69,1030,831],{"class":86},[69,1032,487],{"class":75},[69,1034,307],{"class":333},[69,1036,838],{"class":135},[69,1038,842],{"class":841},[69,1040,845],{"class":75},[69,1042,1043],{"class":71,"line":446},[69,1044,850],{"class":75},[69,1046,1047],{"class":71,"line":452},[69,1048,190],{"class":75},[69,1050,1051],{"class":71,"line":458},[69,1052,449],{"class":75},[69,1054,1055,1057,1059],{"class":71,"line":463},[69,1056,108],{"class":82},[69,1058,87],{"class":86},[69,1060,114],{"class":75},[69,1062,1063,1065,1067,1069,1071,1073],{"class":71,"line":512},[69,1064,871],{"class":75},[69,1066,181],{"class":135},[69,1068,876],{"class":75},[69,1070,142],{"class":135},[69,1072,440],{"class":135},[69,1074,883],{"class":75},[69,1076,1077,1079],{"class":71,"line":518},[69,1078,888],{"class":86},[69,1080,891],{"class":75},[69,1082,1083,1085],{"class":71,"line":527},[69,1084,521],{"class":135},[69,1086,898],{"class":75},[69,1088,1089],{"class":71,"line":901},[69,1090,190],{"class":75},[290,1092,1094],{"id":1093},"risk-assessment","Risk Assessment",[1096,1097,1098,1099,1098,1129],"table",{},"\n  ",[1100,1101,1102,1103,1098],"thead",{},"\n    ",[1104,1105,1106,1107,1106,1111,1106,1114,1106,1117,1106,1120,1106,1123,1106,1126,1102],"tr",{},"\n      ",[1108,1109,1110],"th",{},"Rule",[1108,1112,1113],{},"Severity",[1108,1115,1116],{},"Likelihood",[1108,1118,1119],{},"Detectable",[1108,1121,1122],{},"Repairable",[1108,1124,1125],{},"Priority",[1108,1127,1128],{},"Level",[1130,1131,1102,1132,1098],"tbody",{},[1104,1133,1106,1134,1106,1138,1106,1141,1106,1144,1106,1147,1106,1149,1106,1156,1102],{},[1135,1136,1137],"td",{},"OOP55-CPP",[1135,1139,1140],{},"High",[1135,1142,1143],{},"Probable",[1135,1145,1146],{},"No",[1135,1148,1146],{},[1135,1150,1152],{"style":1151},"color: #f1c40f;",[1153,1154,1155],"b",{},"P6",[1135,1157,1158],{"style":1151},[1153,1159,1160],{},"L2",[290,1162,1164],{"id":1163},"automated-detection","Automated Detection",[1096,1166,1169,1195],{"className":1167},[1168],"wrapped",[1100,1170,1171],{},[1104,1172,1175,1180,1185,1190],{"className":1173},[1174],"header",[1108,1176,1177],{},[39,1178,1179],{},"Tool",[1108,1181,1182],{},[39,1183,1184],{},"Version",[1108,1186,1187],{},[39,1188,1189],{},"Checker",[1108,1191,1192],{},[39,1193,1194],{},"Description",[1130,1196,1197,1231,1258,1285,1313,1338,1364,1383],{},[1104,1198,1201,1207,1217,1227],{"className":1199},[1200],"odd",[1135,1202,1203],{},[228,1204,1206],{"href":1205},"\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fastree","Astrée",[1135,1208,1209],{},[1210,1211,1214],"div",{"className":1212},[1213],"content-wrapper",[39,1215,1216],{},"25.10",[1135,1218,1219],{},[1220,1221,1222,1223,1226],"strong",{},"overflow_upon_dereference",[1224,1225],"br",{},"\ninvalid_function_pointer",[1135,1228,1229],{},[1224,1230],{},[1104,1232,1235,1241,1249,1254],{"className":1233},[1234],"even",[1135,1236,1237],{},[228,1238,1240],{"href":1239},"\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Faxivion-bauhaus-suite","Axivion Bauhaus Suite",[1135,1242,1243],{},[1210,1244,1246],{"className":1245},[1213],[39,1247,1248],{},"7.2.0",[1135,1250,1251],{},[1220,1252,1253],{},"CertC++-OOP55",[1135,1255,1256],{},[1224,1257],{},[1104,1259,1261,1267,1273,1280],{"className":1260},[1200],[1135,1262,1263],{},[228,1264,1266],{"href":1265},"\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fcodesonar","CodeSonar",[1135,1268,1269],{},[1210,1270,1272],{"className":1271},[1213],"9.1p0",[1135,1274,1275],{},[39,1276,1277],{},[1220,1278,1279],{},"LANG.MEM.UVAR",[1135,1281,1282],{},[39,1283,1284],{},"Uninitialized Variable",[1104,1286,1288,1294,1302,1309],{"className":1287},[1234],[1135,1289,1290],{},[228,1291,1293],{"href":1292},"\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fhelix-qac","Helix QAC",[1135,1295,1296],{},[1210,1297,1299],{"className":1298},[1213],[39,1300,1301],{},"2025.2",[1135,1303,1304],{},[39,1305,1306],{},[1220,1307,1308],{},"DF2810, DF2811, DF2812, DF2813, DF2814",[1135,1310,1311],{},[1224,1312],{},[1104,1314,1316,1322,1327,1334],{"className":1315},[1200],[1135,1317,1318],{},[228,1319,1321],{"href":1320},"\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fklocwork","Klocwork",[1135,1323,1324],{},[1210,1325,1301],{"className":1326},[1213],[1135,1328,1329],{},[39,1330,1331],{},[1220,1332,1333],{},"CERT.OOP.PTR_MEMBER.NO_MEMBER",[1135,1335,1336],{},[1224,1337],{},[1104,1339,1341,1347,1352,1359],{"className":1340},[1234],[1135,1342,1343],{},[228,1344,1346],{"href":1345},"\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fparasoft","Parasoft C\u002FC++test",[1135,1348,1349],{},[1210,1350,1301],{"className":1351},[1213],[1135,1353,1354],{},[1220,1355,1356,1357],{},"CERT_CPP-OOP55-a",[1224,1358],{},[1135,1360,1361],{},[39,1362,1363],{},"A cast shall not convert a pointer to a function to any other pointer type, including a pointer to function type",[1104,1365,1367,1372,1376,1380],{"className":1366},[1200],[1135,1368,1369],{},[228,1370,1371],{"href":1345},"Parasoft Insure++",[1135,1373,1374],{},[1224,1375],{},[1135,1377,1378],{},[1224,1379],{},[1135,1381,1382],{},"Runtime detection",[1104,1384,1386,1392,1400,1406],{"className":1385},[1234],[1135,1387,1388],{},[228,1389,1391],{"href":1390},"\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fcc-analyzers\u002Fpolyspace-bug-finder","Polyspace Bug Finder",[1135,1393,1394],{},[1210,1395,1397],{"className":1396},[1213],[39,1398,1399],{},"R2025b",[1135,1401,1402],{},[228,1403,1405],{"href":1404},"https:\u002F\u002Fwww.mathworks.com\u002Fhelp\u002Fbugfinder\u002Fref\u002Fcertcoop55cpp.html","CERT C++: OOP55-CPP",[1135,1407,1408],{},"Checks for pointers to member accessing non-existent class members (rule fully covered).",[290,1410,1412],{"id":1411},"related-vulnerabilities","Related Vulnerabilities",[39,1414,1415,1416,1420,1421,58],{},"Search for other ",[228,1417,1419],{"href":1418},"\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fbb-definitions#BB.Definitions-vulnerability","vulnerabilities"," resulting from the violation of this rule on the ",[228,1422,1426],{"href":1423,"rel":1424},"https:\u002F\u002Fwww.kb.cert.org\u002Fvulnotes\u002Fbymetric?searchview&query=FIELD+KEYWORDS+contains+OOP39-CPP",[1425],"nofollow","CERT website",[290,1428,1430],{"id":1429},"related-guidelines","Related Guidelines",[39,1432,1433],{},[240,1434,1435,1436,58],{},"This rule is a subset of ",[228,1437,1439],{"href":1438},"\u002Fsei-cert-c-coding-standard\u002Frules\u002Fexpressions-exp\u002Fexp34-c","EXP34-C. Do not dereference null pointers",[290,1441,1443],{"id":1442},"bibliography","Bibliography",[1096,1445,1446,1454],{},[1100,1447,1448],{},[1104,1449,1450,1452],{},[1108,1451],{},[1108,1453],{},[1130,1455,1456],{},[1104,1457,1458,1464],{},[1135,1459,1460,1461,1463],{},"[ ",[228,1462,231],{"href":230}," ]",[1135,1465,1466],{},"Subclause 5.5, \"Pointer-to-Member Operators\"",[1468,1469],"hr",{},[39,1471,1472,1479,1480,1479,1486],{},[228,1473,1475],{"href":1474},"\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fobject-oriented-programming-oop\u002Foop54-cpp",[1476,1477],"img",{"src":1478},"\u002Fattachments\u002F88046682\u002F88480621.png"," ",[228,1481,1483],{"href":1482},"\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fobject-oriented-programming-oop\u002F",[1476,1484],{"src":1485},"\u002Fattachments\u002F88046682\u002F88475556.png",[228,1487,1489],{"href":1488},"\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fobject-oriented-programming-oop\u002Foop56-cpp",[1476,1490],{"src":1491},"\u002Fattachments\u002F88046682\u002F88475555.png",[1493,1494,1495],"style",{},"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 .sk8M1, html code.shiki .sk8M1{--shiki-default:#24292E;--shiki-default-font-style:inherit;--shiki-dark:#E1E4E8;--shiki-dark-font-style:inherit;--shiki-sepia:#66D9EF;--shiki-sepia-font-style:italic}html pre.shiki code .sC2Qs, html code.shiki .sC2Qs{--shiki-default:#D73A49;--shiki-dark:#F97583;--shiki-sepia:#F92672}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html .sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}html.sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}html pre.shiki code .sz2Vg, html code.shiki .sz2Vg{--shiki-default:#6F42C1;--shiki-default-text-decoration:inherit;--shiki-dark:#B392F0;--shiki-dark-text-decoration:inherit;--shiki-sepia:#A6E22E;--shiki-sepia-text-decoration:underline}html pre.shiki code .s8-w5, html code.shiki .s8-w5{--shiki-default:#6A737D;--shiki-dark:#6A737D;--shiki-sepia:#88846F}html pre.shiki code .sTHNf, html code.shiki .sTHNf{--shiki-default:#E36209;--shiki-default-font-style:inherit;--shiki-dark:#FFAB70;--shiki-dark-font-style:inherit;--shiki-sepia:#FD971F;--shiki-sepia-font-style:italic}",{"title":65,"searchDepth":79,"depth":79,"links":1497},[1498,1499,1500,1501,1502,1503,1504,1505,1506],{"id":292,"depth":79,"text":293},{"id":532,"depth":79,"text":533},{"id":717,"depth":79,"text":293},{"id":906,"depth":79,"text":533},{"id":1093,"depth":79,"text":1094},{"id":1163,"depth":79,"text":1164},{"id":1411,"depth":79,"text":1412},{"id":1429,"depth":79,"text":1430},{"id":1442,"depth":79,"text":1443},"The pointer-to-member operators .* and ->* are used to obtain an object or a function as though it were a member of an underlying object. For instance, the following are functionally equivalent ways to call the member function f() on the object o .","md",{"tags":1510},[1511,1512,1513,1514,1515,1516,1517,1518],"review","oop","review-dms","rule","nptc-aliasing","review-ajb","no-autodetect","nptc","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fobject-oriented-programming-oop\u002Foop55-cpp",{"title":30,"description":1507},"5.sei-cert-cpp-coding-standard\u002F3.rules\u002F12.object-oriented-programming-oop\u002F07.oop55-cpp","yGlOAaqFZMGLAB4K1blBTQ0hHeK9KTaM6ITa4k0H8dA",[1524,1527],{"title":1525,"path":1474,"stem":1526,"children":-1},"OOP54-CPP. Gracefully handle self-copy assignment","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F12.object-oriented-programming-oop\u002F06.oop54-cpp",{"title":1528,"path":1488,"stem":1529,"children":-1},"OOP56-CPP. Honor replacement handler requirements","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F12.object-oriented-programming-oop\u002F08.oop56-cpp",[1531],{"title":1532,"path":1533,"stem":1534,"children":1535},"SEI CERT C++ Coding Standard","\u002Fsei-cert-cpp-coding-standard","5.sei-cert-cpp-coding-standard\u002F1.index",[1536,1537,1604,1999,2212,2222],{"title":1532,"path":1533,"stem":1534},{"title":1538,"path":1539,"stem":1540,"children":1541},"Front Matter","\u002Fsei-cert-cpp-coding-standard\u002Ffront-matter","5.sei-cert-cpp-coding-standard\u002F2.front-matter\u002F1.index",[1542,1543],{"title":1538,"path":1539,"stem":1540},{"title":1544,"path":1545,"stem":1546,"children":1547},"Introduction","\u002Fsei-cert-cpp-coding-standard\u002Ffront-matter\u002Fintroduction","5.sei-cert-cpp-coding-standard\u002F2.front-matter\u002F2.introduction\u002F01.index",[1548,1549,1553,1557,1561,1565,1569,1573,1577,1581,1585,1589,1593,1597,1601],{"title":1544,"path":1545,"stem":1546},{"title":1550,"path":1551,"stem":1552},"Scope","\u002Fsei-cert-cpp-coding-standard\u002Ffront-matter\u002Fintroduction\u002Fscope","5.sei-cert-cpp-coding-standard\u002F2.front-matter\u002F2.introduction\u002F02.scope",{"title":1554,"path":1555,"stem":1556},"Audience","\u002Fsei-cert-cpp-coding-standard\u002Ffront-matter\u002Fintroduction\u002Faudience","5.sei-cert-cpp-coding-standard\u002F2.front-matter\u002F2.introduction\u002F03.audience",{"title":1558,"path":1559,"stem":1560},"Usage","\u002Fsei-cert-cpp-coding-standard\u002Ffront-matter\u002Fintroduction\u002Fusage","5.sei-cert-cpp-coding-standard\u002F2.front-matter\u002F2.introduction\u002F04.usage",{"title":1562,"path":1563,"stem":1564},"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":1566,"path":1567,"stem":1568},"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":1570,"path":1571,"stem":1572},"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":1574,"path":1575,"stem":1576},"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":1578,"path":1579,"stem":1580},"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":1582,"path":1583,"stem":1584},"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":1586,"path":1587,"stem":1588},"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":1590,"path":1591,"stem":1592},"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":1594,"path":1595,"stem":1596},"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":1598,"path":1599,"stem":1600},"Acknowledgments","\u002Fsei-cert-cpp-coding-standard\u002Ffront-matter\u002Fintroduction\u002Facknowledgments","5.sei-cert-cpp-coding-standard\u002F2.front-matter\u002F2.introduction\u002F14.acknowledgments",{"title":1164,"path":1602,"stem":1603},"\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":1605,"path":1606,"stem":1607,"children":1608},"Rules","\u002Fsei-cert-cpp-coding-standard\u002Frules","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F01.index",[1609,1610,1632,1666,1708,1758,1816,1878,1892,1902,1940,1966],{"title":1605,"path":1606,"stem":1607},{"title":1611,"path":1612,"stem":1613,"children":1614},"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",[1615,1616,1620,1624,1628],{"title":1611,"path":1612,"stem":1613},{"title":1617,"path":1618,"stem":1619},"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":1621,"path":1622,"stem":1623},"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":1625,"path":1626,"stem":1627},"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":1629,"path":1630,"stem":1631},"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":1633,"path":1634,"stem":1635,"children":1636},"Concurrency (CON)","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fconcurrency-con","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F03.concurrency-con\u002F1.index",[1637,1638,1642,1646,1650,1654,1658,1662],{"title":1633,"path":1634,"stem":1635},{"title":1639,"path":1640,"stem":1641},"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":1643,"path":1644,"stem":1645},"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":1647,"path":1648,"stem":1649},"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":1651,"path":1652,"stem":1653},"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":1655,"path":1656,"stem":1657},"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":1659,"path":1660,"stem":1661},"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":1663,"path":1664,"stem":1665},"CON56-CPP. Do not speculatively lock a non-recursive mutex that is already owned by the calling thread","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fconcurrency-con\u002Fcon56-cpp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F03.concurrency-con\u002F8.con56-cpp",{"title":1667,"path":1668,"stem":1669,"children":1670},"Containers (CTR)","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fcontainers-ctr","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F04.containers-ctr\u002F01.index",[1671,1672,1676,1680,1684,1688,1692,1696,1700,1704],{"title":1667,"path":1668,"stem":1669},{"title":1673,"path":1674,"stem":1675},"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":1677,"path":1678,"stem":1679},"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":1681,"path":1682,"stem":1683},"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":1685,"path":1686,"stem":1687},"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":1689,"path":1690,"stem":1691},"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":1693,"path":1694,"stem":1695},"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":1697,"path":1698,"stem":1699},"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":1701,"path":1702,"stem":1703},"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":1705,"path":1706,"stem":1707},"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":1709,"path":1710,"stem":1711,"children":1712},"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",[1713,1714,1718,1722,1726,1730,1734,1738,1742,1746,1750,1754],{"title":1709,"path":1710,"stem":1711},{"title":1715,"path":1716,"stem":1717},"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":1719,"path":1720,"stem":1721},"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":1723,"path":1724,"stem":1725},"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":1727,"path":1728,"stem":1729},"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":1731,"path":1732,"stem":1733},"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":1735,"path":1736,"stem":1737},"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":1739,"path":1740,"stem":1741},"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":1743,"path":1744,"stem":1745},"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":1747,"path":1748,"stem":1749},"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":1751,"path":1752,"stem":1753},"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":1755,"path":1756,"stem":1757},"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":1759,"path":1760,"stem":1761,"children":1762},"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",[1763,1764,1768,1772,1776,1780,1784,1788,1792,1796,1800,1804,1808,1812],{"title":1759,"path":1760,"stem":1761},{"title":1765,"path":1766,"stem":1767},"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":1769,"path":1770,"stem":1771},"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":1773,"path":1774,"stem":1775},"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":1777,"path":1778,"stem":1779},"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":1781,"path":1782,"stem":1783},"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":1785,"path":1786,"stem":1787},"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":1789,"path":1790,"stem":1791},"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":1793,"path":1794,"stem":1795},"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":1797,"path":1798,"stem":1799},"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":1801,"path":1802,"stem":1803},"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":1805,"path":1806,"stem":1807},"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":1809,"path":1810,"stem":1811},"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":1813,"path":1814,"stem":1815},"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":1817,"path":1818,"stem":1819,"children":1820},"Expressions (EXP)","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fexpressions-exp","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F07.expressions-exp\u002F01.index",[1821,1822,1826,1830,1834,1838,1842,1846,1850,1854,1858,1862,1866,1870,1874],{"title":1817,"path":1818,"stem":1819},{"title":1823,"path":1824,"stem":1825},"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":1827,"path":1828,"stem":1829},"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":1831,"path":1832,"stem":1833},"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":1835,"path":1836,"stem":1837},"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":1839,"path":1840,"stem":1841},"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":1843,"path":1844,"stem":1845},"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":1847,"path":1848,"stem":1849},"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":1851,"path":1852,"stem":1853},"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":1855,"path":1856,"stem":1857},"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":1859,"path":1860,"stem":1861},"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":1863,"path":1864,"stem":1865},"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":1867,"path":1868,"stem":1869},"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":1871,"path":1872,"stem":1873},"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":1875,"path":1876,"stem":1877},"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":1879,"path":1880,"stem":1881,"children":1882},"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",[1883,1884,1888],{"title":1879,"path":1880,"stem":1881},{"title":1885,"path":1886,"stem":1887},"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":1889,"path":1890,"stem":1891},"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":1893,"path":1894,"stem":1895,"children":1896},"Integers (INT)","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fintegers-int","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F09.integers-int\u002F1.index",[1897,1898],{"title":1893,"path":1894,"stem":1895},{"title":1899,"path":1900,"stem":1901},"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":1903,"path":1904,"stem":1905,"children":1906},"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",[1907,1908,1912,1916,1920,1924,1928,1932,1936],{"title":1903,"path":1904,"stem":1905},{"title":1909,"path":1910,"stem":1911},"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":1913,"path":1914,"stem":1915},"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":1917,"path":1918,"stem":1919},"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":1921,"path":1922,"stem":1923},"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":1925,"path":1926,"stem":1927},"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":1929,"path":1930,"stem":1931},"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":1933,"path":1934,"stem":1935},"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":1937,"path":1938,"stem":1939},"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":1941,"path":1942,"stem":1943,"children":1944},"Miscellaneous (MSC)","\u002Fsei-cert-cpp-coding-standard\u002Frules\u002Fmiscellaneous-msc","5.sei-cert-cpp-coding-standard\u002F3.rules\u002F11.miscellaneous-msc\u002F1.index",[1945,1946,1950,1954,1958,1962],{"title":1941,"path":1942,"stem":1943},{"title":1947,"path":1948,"stem":1949},"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":1951,"path":1952,"stem":1953},"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":1955,"path":1956,"stem":1957},"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":1959,"path":1960,"stem":1961},"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":1963,"path":1964,"stem":1965},"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":1967,"path":1968,"stem":1969,"children":1970},"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",[1971,1972,1976,1980,1984,1988,1989,1990,1991,1995],{"title":1967,"path":1968,"stem":1969},{"title":1973,"path":1974,"stem":1975},"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":1977,"path":1978,"stem":1979},"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":1981,"path":1982,"stem":1983},"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":1985,"path":1986,"stem":1987},"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":1525,"path":1474,"stem":1526},{"title":30,"path":1519,"stem":1521},{"title":1528,"path":1488,"stem":1529},{"title":1992,"path":1993,"stem":1994},"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":1996,"path":1997,"stem":1998},"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":2000,"path":2001,"stem":2002,"children":2003},"Back Matter","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F1.index",[2004,2005,2009,2013,2194,2208],{"title":2000,"path":2001,"stem":2002},{"title":2006,"path":2007,"stem":2008},"AA. Bibliography","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Faa-bibliography","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F2.aa-bibliography",{"title":2010,"path":2011,"stem":2012},"BB. Definitions","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fbb-definitions","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F3.bb-definitions",{"title":2014,"path":2015,"stem":2016,"children":2017},"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",[2018,2019,2021,2025,2027,2031,2035,2039,2043,2047,2051,2055,2059,2061,2065,2069,2073,2077,2081,2085,2089,2093,2097,2099,2103,2105,2109,2113,2117,2120,2124,2126,2130,2134,2138,2142,2146,2150,2154,2158,2162,2166,2170,2174,2178,2182,2186,2190],{"title":2014,"path":2015,"stem":2016},{"title":1206,"path":1205,"stem":2020},"5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F02.astree",{"title":2022,"path":2023,"stem":2024},"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":1240,"path":1239,"stem":2026},"5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F04.axivion-bauhaus-suite",{"title":2028,"path":2029,"stem":2030},"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":2032,"path":2033,"stem":2034},"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":2036,"path":2037,"stem":2038},"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":2040,"path":2041,"stem":2042},"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":2044,"path":2045,"stem":2046},"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":2048,"path":2049,"stem":2050},"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":2052,"path":2053,"stem":2054},"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":2056,"path":2057,"stem":2058},"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":1266,"path":1265,"stem":2060},"5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F13.codesonar",{"title":2062,"path":2063,"stem":2064},"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":2066,"path":2067,"stem":2068},"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":2070,"path":2071,"stem":2072},"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":2074,"path":2075,"stem":2076},"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":2078,"path":2079,"stem":2080},"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":2082,"path":2083,"stem":2084},"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":2086,"path":2087,"stem":2088},"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":2090,"path":2091,"stem":2092},"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":2094,"path":2095,"stem":2096},"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":1293,"path":1292,"stem":2098},"5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F23.helix-qac",{"title":2100,"path":2101,"stem":2102},"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":1321,"path":1320,"stem":2104},"5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F25.klocwork",{"title":2106,"path":2107,"stem":2108},"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":2110,"path":2111,"stem":2112},"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":2114,"path":2115,"stem":2116},"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":2118,"path":1345,"stem":2119},"Parasoft","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F29.parasoft",{"title":2121,"path":2122,"stem":2123},"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":1391,"path":1390,"stem":2125},"5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F4.cc-analyzers\u002F31.polyspace-bug-finder",{"title":2127,"path":2128,"stem":2129},"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":2131,"path":2132,"stem":2133},"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":2135,"path":2136,"stem":2137},"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":2139,"path":2140,"stem":2141},"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":2143,"path":2144,"stem":2145},"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":2147,"path":2148,"stem":2149},"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":2151,"path":2152,"stem":2153},"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":2155,"path":2156,"stem":2157},"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":2159,"path":2160,"stem":2161},"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":2163,"path":2164,"stem":2165},"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":2167,"path":2168,"stem":2169},"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":2171,"path":2172,"stem":2173},"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":2175,"path":2176,"stem":2177},"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":2179,"path":2180,"stem":2181},"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":2183,"path":2184,"stem":2185},"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":2187,"path":2188,"stem":2189},"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":2191,"path":2192,"stem":2193},"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":2195,"path":2196,"stem":2197,"children":2198},"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",[2199,2200,2204],{"title":2195,"path":2196,"stem":2197},{"title":2201,"path":2202,"stem":2203},"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":2205,"path":2206,"stem":2207},"MITRE CWE","\u002Fsei-cert-cpp-coding-standard\u002Fback-matter\u002Fdd-related-guidelines\u002Fmitre-cwe","5.sei-cert-cpp-coding-standard\u002F4.back-matter\u002F5.dd-related-guidelines\u002F3.mitre-cwe",{"title":2209,"path":2210,"stem":2211},"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":2213,"path":2214,"stem":2215,"children":2216},"Admin","\u002Fsei-cert-cpp-coding-standard\u002Fadmin","5.sei-cert-cpp-coding-standard\u002F5.admin\u002F1.index",[2217,2218],{"title":2213,"path":2214,"stem":2215},{"title":2219,"path":2220,"stem":2221},"TODO List","\u002Fsei-cert-cpp-coding-standard\u002Fadmin\u002Ftodo-list","5.sei-cert-cpp-coding-standard\u002F5.admin\u002F2.todo-list",{"title":2223,"path":2224,"stem":2225},"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",1775657784227]