<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/81515>81515</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[clang-tidy] False positive bugprone-non-zero-enum-to-bool-conversion with custom operator and negation
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang-tidy
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
chrchr-github
</td>
</tr>
</table>
<pre>
A slight variation of [#65315](https://github.com/llvm/llvm-project/issues/65315)
~~~c++
enum E { E1 = 1, E2 = 2 };
E operator&(E a, E b) { return static_cast<E>((int)a & (int)b); }
void f(E e) {
if (!(e & E1)) {}
}
~~~
~~~
[<source>:4:10: warning: conversion of 'E' into 'bool' will always return 'true', enum doesn't have a zero-value enumerator [bugprone-non-zero-enum-to-bool-conversion]
4 | if (!(e & E1)) {}
| ^
[<source>:1:6: note: enum is defined here](javascript:;)
1 | enum E { E1 = 1, E2 = 2 };
| ^
~~~
https://godbolt.org/z/r1P3zx38a
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJycVM-OszgMfxpzsRgRBwocOLRTet43WAUIkE-ZpEpCZ2cOffZV0imz-qSVdlZCik3sn52f_wjv1WKk7KA6QXXOxBZW67pxdePq8kWFdRuywU4f3RG9Vssa8CacEkFZg3bG6Eb8UHFWQXUGatYQrh74EegCdHkAvIz2Deii9e155Fdnf8kxAF2U95v0QJcHCLVQnKE43u_3EegUv6RLs71hj1CfsGcI_IwM6BV7SjIh1GfgX7Y92qt0IlgHdABqehTJFgegNkE4GTZn0AcR1PjnKHwA_toD74EaoEaZANQKBDrgrkZn4KcUKYW5WTXhnPDlF_DjAhFRzZiwGFAjE1DPIsCX3RNjF-73-29CpJa_eru5UcbM-LEEfmQF8CO-C2eUWaI4WnOTzj_rQXUPVKMywUZlsFZH_V1pjUK_iw__fDxQHdwmgepITuJ3stKb-B9XcZMo8FM6m9-E3mQyeJAaiz5sy9VZI3NjTZ6s4n0ebB4j5t9Jxa7YSSkR6lf8AT3Jdnd6KFX_b_ww4MdD5MTYIOOZHqU8TnJWRk64SicfbfpL3IQfnbqG2Kv8tPddDMFSxJ903Heee3p7HX-bCDsNVocX6xagyyfQxbE_-OdfvBHZ1PGp5a3IZMfqoq4PZdm02dqJmnMah6qtWnY41OXMynlmczO2Qzu37ZSpjgoqC2LE2oJR9dKWYi5ZM0xyOrTjzKAs5JtQ-iUOX4ydpbHrGlaxKtNikNqnFUA0amGWPKjpA4jiSnBdmthhWzyUhVY--G-YoIJOy-MfbtUZL0J7iVfrVVA3if-5W_BdhRXHzQf7tg8xCjOhkUtaOtnmdPf_l0x68N8BAAD__29bcbo">