readability-simplify-boolean-expr¶
Looks for boolean expressions involving boolean constants and simplifies them to use the appropriate boolean expression directly.
Examples:
| Initial expression | Result | 
| if (b == true) | if (b) | 
| if (b == false) | if (!b) | 
| if (b && true) | if (b) | 
| if (b && false) | if (false) | 
| if (b || true) | if (true) | 
| if (b || false) | if (b) | 
| e ? true : false | e | 
| e ? false : true | !e | 
| if (true) t(); else f(); | t(); | 
| if (false) t(); else f(); | f(); | 
| if (e) return true; else return false; | return e; | 
| if (e) return false; else return true; | return !e; | 
| if (e) b = true; else b = false; | b = e; | 
| if (e) b = false; else b = true; | b = !e; | 
| if (e) return true; return false; | return e; | 
| if (e) return false; return true; | return !e; | 
- The resulting expression eis modified as follows:
- Unnecessary parentheses around the expression are removed.
- Negated applications of !are eliminated.
- Negated applications of comparison operators are changed to use the opposite condition.
- Implicit conversions of pointers, including pointers to members, to
boolare replaced with explicit comparisons tonullptrin C++11 orNULLin C++98/03.
- Implicit casts to boolare replaced with explicit casts tobool.
- Object expressions with explicit operator boolconversion operators are replaced with explicit casts tobool.
- Implicit conversions of integral types to boolare replaced with explicit comparisons to0.
 
- Examples:
- The ternary assignment - bool b = (i < 0) ? true : false;has redundant parentheses and becomes- bool b = i < 0;.
- The conditional return - if (!b) return false; return true;has an implied double negation and becomes- return b;.
- The conditional return - if (i < 0) return false; return true;becomes- return i >= 0;.- The conditional return - if (i != 0) return false; return true;becomes- return i == 0;.
- The conditional return - if (p) return true; return false;has an implicit conversion of a pointer to- booland becomes- return p != nullptr;.- The ternary assignment - bool b = (i & 1) ? true : false;has an implicit conversion of- i & 1to- booland becomes- bool b = (i & 1) != 0;.
- The conditional return - if (i & 1) return true; else return false;has an implicit conversion of an integer quantity- i & 1to- booland becomes- return (i & 1) != 0;
- Given - struct X { explicit operator bool(); };, and an instance- xof- struct X, the conditional return- if (x) return true; return false;becomes- return static_cast<bool>(x);