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