<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/77427>77427</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [clang-tidy-17] bugprone-non-zero-enum-to-bool-conversion flags false positive
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            clang-tidy
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          craffael
      </td>
    </tr>
</table>

<pre>
    Steps to reproduce:
1) Create the file `main.cc`:
```
#include <iostream>

enum class TikzOutputCtrl : unsigned int {
  RenderCells = 1,
  CellNumbering = 2
};

TikzOutputCtrl operator&(const TikzOutputCtrl &lhs, const TikzOutputCtrl &rhs) {
    return static_cast<TikzOutputCtrl>(static_cast<unsigned int>(lhs) &
 static_cast<unsigned int>(rhs));
}

int main() {
    auto output_ctrl = TikzOutputCtrl::RenderCells;
    const bool q = static_cast<bool>(output_ctrl & TikzOutputCtrl::CellNumbering);

 std::cout << q << '\n';

}
```

2) Create a `.clang-tidy` file:
```
---
Checks: 'bugprone-non-zero-enum-to-bool-conversion'

```

3) Run clang-tidy-17 with `std=c++20`. E.g. use the following CMakeLists.txt and set `CMAKE_EXPORT_COMPILE_COMMANDS=On`:
```
add_executable(main main.cc)
target_compile_features(main PUBLIC cxx_std_20)
```


Output of clang-tidy-17:
```
main.cc:15:20: warning: conversion of 'TikzOutputCtrl' into 'bool' will always return 'true', enum doesn't have a zero-value enumerator [bugprone-non-zero-enum-to-bool-conversion]
   15 | const bool q = static_cast<bool>(output_ctrl & TikzOutputCtrl::CellNumbering);
      | ^
main.cc:3:12: note: enum is defined here
    3 | enum class TikzOutputCtrl : unsigned int {
      |            ^
```

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy8VU2P4jgQ_TXFpRSU2EDIgQMEWhpt93SrZ1baGzJOAd42MeuP_phfv7IDNDDdu6M9bBQlAbuqXr16VRbOqU1LNIHhDIbzngh-a-xEWrFeC9K9lWneJt887R16g5b21jRBEvAp5HPIpwWwCmtLwhP6LeFaaUIY5Tuh2r6UMMpPW-N3d3c_GVet1KEhBF4r47wlsQO-OCynJ7Vhh1IL5_C7evpxH_w--NpbjcCnGNoEvkHVeoRy1tkgPlLbkK1Ja4fA51gAq49r8d-vYbciq9pNWmWHgOUc-Ow8-FVEsycrvLHARsDG0rTO_wSKjfTWAavxs2Ubl6tzsIiWfLAtOi-8kkspnAdeX5pGWtj4csd59t26Pjhno4PzfzPo0MT7lHk5P6cgEhtLCWz8E2wRvEGTIC5lV5I5XsOeAp-eleMUJzroOFoZo_GvZHwJNy50MC-CsNGHQS7qepHRkYqm2yhN8FFxwOsUNn0AK2FYt_F1affOx5V605OdqV9E2felFu0m86p5g1GeuuEz_WdZ1n3UW5JPLuoZWLkKm701LWWtabMfZE0WWyDzJot0ZNK0z2SdMgnqOc6P4PEI7zG0-I4qK0p8UX4bwSZK5hLYDNiMReM-LvqbPgZ3aGajtXmJfVLfiSe6Vc67vn_1KNoGHfnopL6b_rZYLv54uH_8vqzv7x6-3C7i-276df4N-Py-_YcZIJpmSa8kgxcrTcDGUWt4nB2s6nZ5YTfkl9Ls9krTck3CB0vuuP3h99ntlxrl6-vS-WbJ8pPhh6R0z04-aNaX3HwG9AiJT4sh8CmLGeGLsG0UG5_ie12iS2DllURZGZvOpApHWbNYBa1R6Bfx5o4TAFjpbaBYWlZjmn2NIRdr7XErnqPIkiaehQ6UNnQjCWE4-3XlDOenHiyGCGX9P3UipivGg-HimlceuWWRy9b42DRd_sphQ2sVp9aWLL074snRfzsfjjDOrhOiq8L3mglvKl6JHk2KMh-UVZGPyt52IvLBeliNZDUel7wZD8ZVsWr4uGjEOh-S4D01YTkb5EVe5VU-YGW_KMblWMiGUS4HVTOCQU47oXRf6-dd39hNTzkXaFKWA1b2tFiRdulYZuxsqjAWj2k7iUbZKmwcDHKdGvPkxiuv04F-Ke3hHH9ZI7jWYuNwLbQj3BunvHqmXrB6svV-H4cVsBtgNxvlt2HVl2YH7CYCOLyyvTV_kvTAblJSDthNyuvvAAAA__9uiYr9">