From d45496ff5ec1334fe804f69c77beffe22ed8271a Mon Sep 17 00:00:00 2001 From: Arthur O'Dwyer Date: Mon, 20 Apr 2020 08:59:37 -0400 Subject: [PATCH 1/2] You should never =delete a destructor! (#1605) --- CppCoreGuidelines.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CppCoreGuidelines.md b/CppCoreGuidelines.md index 93ce685..f09767f 100644 --- a/CppCoreGuidelines.md +++ b/CppCoreGuidelines.md @@ -4492,7 +4492,7 @@ Destructor rules: * [C.30: Define a destructor if a class needs an explicit action at object destruction](#Rc-dtor) * [C.31: All resources acquired by a class must be released by the class's destructor](#Rc-dtor-release) * [C.32: If a class has a raw pointer (`T*`) or reference (`T&`), consider whether it might be owning](#Rc-dtor-ptr) -* [C.33: If a class has an owning pointer member, define or `=delete` a destructor](#Rc-dtor-ptr2) +* [C.33: If a class has an owning pointer member, define a destructor](#Rc-dtor-ptr2) * [C.35: A base class destructor should be either public and virtual, or protected and non-virtual](#Rc-dtor-virtual) * [C.36: A destructor may not fail](#Rc-dtor-fail) * [C.37: Make destructors `noexcept`](#Rc-dtor-noexcept) From 986402298afa31acb46f44af5a2f8b3cb6788b73 Mon Sep 17 00:00:00 2001 From: Sergey Zubkov Date: Wed, 22 Apr 2020 09:35:16 -0400 Subject: [PATCH 2/2] travis CI fixes --- CppCoreGuidelines.md | 42 +++++++++++++++++++------------------ scripts/hunspell/isocpp.dic | 3 +++ 2 files changed, 25 insertions(+), 20 deletions(-) diff --git a/CppCoreGuidelines.md b/CppCoreGuidelines.md index f09767f..5ebd539 100644 --- a/CppCoreGuidelines.md +++ b/CppCoreGuidelines.md @@ -12698,7 +12698,7 @@ consider `gsl::finally()` as a cleaner and more reliable alternative to `goto ex switch(x){ case 1 : - while(/* some condition */){ + while (/* some condition */) { //... break; } //Oops! break switch or break while intended? @@ -12715,8 +12715,8 @@ Often, a loop that requires a `break` is a good candidate for a function (algori void use1(){ std::vector vec = {/* initialized with some values */}; T value; - for(const T item : vec){ - if(/* some condition*/){ + for (const T item : vec) { + if (/* some condition*/) { value = item; break; } @@ -12725,14 +12725,14 @@ Often, a loop that requires a `break` is a good candidate for a function (algori } //BETTER: create a function and return inside loop - T search(const std::vector &vec){ - for(const T &item : vec){ - if(/* some condition*/) return item; + T search(const std::vector &vec) { + for (const T &item : vec) { + if (/* some condition*/) return item; } return T(); //default value } - void use2(){ + void use2() { std::vector vec = {/* initialized with some values */}; T value = search(vec); /* then do something with value */ @@ -12740,15 +12740,15 @@ Often, a loop that requires a `break` is a good candidate for a function (algori Often, a loop that uses `continue` can equivalently and as clearly be expressed by an `if`-statement. - for(int item : vec){ //BAD - if(item%2 == 0) continue; - if(item == 5) continue; - if(item > 10) continue; + for (int item : vec) { //BAD + if (item%2 == 0) continue; + if (item == 5) continue; + if (item > 10) continue; /* do something with item */ } - for(int item : vec){ //GOOD - if(item%2 != 0 && item != 5 && item <= 10){ + for (int item : vec) { //GOOD + if (item%2 != 0 && item != 5 && item <= 10) { /* do something with item */ } } @@ -14972,21 +14972,20 @@ There is no explicit locking and both correct (value) return and error (exceptio return value; } - void async_example() { try { - auto v1 = std::async(std::launch::async, read_value, "v1.txt"); + auto v1 = std::async(std::launch::async, read_value, "v1.txt"); auto v2 = std::async(std::launch::async, read_value, "v2.txt"); std::cout << v1.get() + v2.get() << '\n'; } - catch (std::ios_base::failure & fail) + catch (std::ios_base::failure & fail) { // handle exception here } } - + ##### Note Unfortunately, `async()` is not perfect. @@ -19201,6 +19200,7 @@ to files that includes it or in scenarios where the different search algorithm i #include "helpers.h" // A project specific file, use "" form ##### Note + Failing to follow this results in difficult to diagnose errors due to picking up the wrong file by incorrectly specifying the scope when it is included. Library creators should put their headers in a folder and have clients include those files using the relative path `#include ` @@ -20282,9 +20282,11 @@ and errors (when we didn't deal correctly with semi-constructed objects consiste // main problem: constructor does not fully construct Picture(int x, int y) { - mx = x; // also bad: assignment in constructor body rather than in member initializer + mx = x; // also bad: assignment in constructor body + // rather than in member initializer my = y; - data = nullptr; // also bad: constant initialization in constructor rather than in member initializer + data = nullptr; // also bad: constant initialization in constructor + // rather than in member initializer } ~Picture() @@ -20466,7 +20468,7 @@ Reference sections: Libraries used have to have been approved for mission critical applications. Any similarities to this set of guidelines are unsurprising because Bjarne Stroustrup was an author of JSF++. Recommended, but note its very specific focus. -* [_MISRA C++ 2008: Guidelines for the use of the C++ language in critical systems_] (https://www.misra.org.uk/Buyonline/tabid/58/Default.aspx). +* [MISRA C++ 2008: Guidelines for the use of the C++ language in critical systems](https://www.misra.org.uk/Buyonline/tabid/58/Default.aspx). * [Mozilla Portability Guide](https://developer.mozilla.org/en-US/docs/Mozilla/C%2B%2B_Portability_Guide). As the name indicates, this aims for portability across many (old) compilers. As such, it is restrictive. diff --git a/scripts/hunspell/isocpp.dic b/scripts/hunspell/isocpp.dic index 9623926..62ea181 100644 --- a/scripts/hunspell/isocpp.dic +++ b/scripts/hunspell/isocpp.dic @@ -52,6 +52,7 @@ ASIC asio AST async +AUTOSAR 'B' b2 BDE @@ -320,6 +321,7 @@ Meyers96 Meyers97 microbenchmarks middleware +MISRA mixin mixins mnemonizes @@ -598,6 +600,7 @@ UTF util v's v1 +v17 v2 va ValueType