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

    <tr>
        <th>Summary</th>
        <td>
            [clang-tidy-19] readability-container-size-empty: false positive when used in value template parameters
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            clang-tidy,
            false-positive
      </td>
    </tr>

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

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

<pre>
    Min Repro:

`test.cpp`:
```C++
#include <array>

template <auto LHS, auto RHS>
inline constexpr bool ARE_EQUAL = (LHS == RHS);

static_assert(ARE_EQUAL<5, std::array<int, 5>{}.size()>); // Diagnostic triggers here

static_assert(5 == std::array<int, 5>{}.size()); // Diagnostic does not trigger here
```

`.clang-tidy`:
```
Checks: >
 readability-container-size-empty,
```

And running this through clang-tidy:
```
$ clang-tidy-19 test.cpp 
2 warnings generated.
/temp/test.cpp:6:28: warning: the 'empty' method should be used to check for emptiness instead of 'size' [readability-container-size-empty]
 6 | static_assert(ARE_EQUAL<5, std::array<int, 5>{}.size()>);
      | ^~~~~~~~~~~~~~~~~~~~~~~~~~~
      | !std::array<int, 5>{}.empty()
/usr/bin/../lib/gcc/x86_64-linux-gnu/13/../../../../include/c++/13/array:195:7: note: method 'array'::empty() defined here
  195 |       empty() const noexcept { return size() == 0; }
      |       ^

```

Note that this did not trigger with `clang-tidy-18`.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy0Vctu6zYQ_ZrxZmBDoqyHF1rIL2SRFmiCrgNaGktsaFIgR3l00W8vKMm5TtOL2y6uQJg0NZwzmjlnKL1XrSEqId1Cul_IgTvrSqnp7Vk6ydLJZ-UXJ9u8l78ogw_UOwtJBdE4sojJ86rue8iieTuLprEDsQ0jqkAkytR6aAgh2Unn5Dskh8kF06XXkqc3A1u8v3sEscNx_XD3OBkqo5UhrK3xTG-9w5O1GquHw9Pht9-re4RkjyCK-7vHsAz_wlGxgWQ7wXiWrOon6T05BlF8HIVklwY8z02IP6nm8HbKcNhPQwD5FvL9yqs_CUQxuj1MzhHEEcQR90q2xnpWNbJTbUvOY0eO_h08vQb5_0C_h9hY8mgsX6E_kK-V-CjWqtbStEtWzfvXekFU7Tqqnz0kFU5pR0eykSelFb8va2tYKkNuGWJa0qXndxC7r0CVadANxijTInfKI3fODm2HN-hfoEGsb94v4w1emYUQVQJfpQsOPbZkyEmmZjWeOgYCjdPMw6TKIKlEEb5iPhSW3BGCyOeoc7wQd7ZB39lBN3giHDw1yBbrkAM8W4fBVhnyHlWgnWzQnoOPqSQ5Qrr9YX7SfUhjhpAHiv0UDgaA8QkYkB7--u7z2VLE_wFvztcIOKZ78A7E8aQMiONqBeKo1QnEsa1rEMe3InvK1kutzPC2bM0A4hgnV8N__MwdAcSxnhvFbDwHU8WbFJIqD8UzlinMc9FA5JORyKf4b6LEhs7KUHMVAWK8SccPnp5b07GdoLH0VlPPCPkWHfHgDH5L81Wq0ai9fP8ph_MqPXwo7FYHv1om5E7ypIJGNZ9U-qq4Q8iiW9YXQaSLpkyaTbKRCyrjPEniTRbF0aIr83Vc1Nk5L-hUFOe0EBsR15ko6mKTNVEtFqoUkVjHIkqiRERxtMopXcs4XZ-bWpzrfA3riC5S6ZXWL5eVde1CeT9QGcfFOi4WWp5I-_EuEOJGrUIEoQtxltrTsrdesXqhsJ3uF64MzpanofWwjrTy7L-5Z8V6vFw-aRvS_Y9bS1LhiIdXPHztyEw6VQZfpB4IP66PXjp5ISbnF4PTZcfch0Y2dctWcTecVrW9BMLql-u07J39g2oOdAx58IGDUypeSvF3AAAA___pfSHw">