<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=http://email.email.llvm.org/c/eJztV11z4yYU_TXyCxONPi35QQ9xPtpM0-7DZtrpUwaJK4kNAhWQXe-v7wVlGyejzHp3mz7Fg7EFl8OFe88R1IodqjswFhjZc9sTSloNpieNoLI7a5UeqMUmNZCBcklqTWWDVpY0ahi4JXVbZ7QFKLKmZGtI65hFSZSvs7qFeJ1GRdpGBY0yEiRlEiXJWZScJVmQbIL0PIgug-g8WEePxT8-m3gH2nAlSZyHURg5jI7bIIuw7qc6RB8QRojdECTX7uds1OoTNDbsvsE158ySJ3P9E9-BxNXKlnev-bylBtgH-dEeBKANub39_dfHHg30YQu4HNhySfXhwwiaWqWNs_tNyXNjeCcHkHYR2faAczMg3JB5T1ykrHrNEwvDKKgFEqQX9jCCpAOQuyC9mrsJ0fDXxDHCCHjPoKWTsPe4OGP11FheC7jf4dAv1s8-PTU99nm09IpQyRxIo8bDAsKy8aB2cLKxR6Z-f-gJsCdZMjhparOn4_gVqIYKsWiSlHc-v5_QMAjeyvDPcG-D5IIwaISLDxo_H-o6dlQ8NTioufwwIPJn_V-D-mCSV6DnNJp3nHwkQbENissg3S6m7r7nqCyY53t6ILTGkBKX_dh_ocQ0yFuOeuNYU7oxxHvh89cRw1OOGE_AZBMeE_jGEgMwGERDRXGQarLjhArWo9IgEyipUS32PdIcgW8kQzL-wZnt3TToz2zH3IbUOAxtjeVCkE65wa85ist6e7U4dhYtssX5kO24S8h4-d2qcapuvEvEu0S8oUTM9V0PGgjFr0LeaWSjdgQlj3n-P9DuhSBl0eKEHZ4cnLr8Sx082kwGvZbYaLjsBBDBJaqHeuv3-Tsv33n55ry8_vPGzYzH85_pZ6rZ4Rc5GWTSAzwYcmx49feIZ3Q8x_qTrenVJJhjr2tdfpUS1aLxpA2EK1albJNu6IpOtle6Gh4mzeDTatKi6q0dvQAk11iObgnz9eDFLQEfuTETGPyTZ1FerPqqbDdtXayzcl0WdV6sI9iUNC7jGNoY4ixdYeKAMFWQb4MkqacOa7_qJDm-ubjW_HL14x7xyt2asGTRJs_jTcjaLI2LAvIk2hS0SHG7Aa9mInQ4odLdSlceEn0z2Cm4seapc6YagF8Aemi5Ff7hmff5JTkKgDsESWW_hAgDhzfBl6rmb4_foKQrv9DKr_IfnnOENQ>54057</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [clang-format] ColumnLimit is not respected in requires clause with BreakBeforeBinaryOperators: NonAssignment
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            bug,
            clang-format
      </td>
    </tr>

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

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

<pre>
    Tested with a fresh clang-format from main branch at commit bfb4afee74c8d6e3b1d020564bfe163073f07a04 (2022-02-24):
```
clang-format version 15.0.0 (git@github.com:llvm/llvm-project.git bfb4afee74c8d6e3b1d020564bfe163073f07a04)
```

Given config:
```
BasedOnStyle: LLVM
BreakBeforeBinaryOperators: NonAssignment
```
the code is formatted to:
```
template <typename T>
  requires is_default_constructible_v<
               hash<T>> and is_copy_constructible_v<hash<T>> and is_move_constructible_v<hash<T>> and is_copy_assignable_v<hash<T>> and is_move_assignable_v<hash<T>> and is_destructible_v<hash<T>> and is_swappable_v<hash<T>> and is_callable_v<hash<T>(T)> and is_same_v<size_t, decltype(hash<T>(declval<T>()))> and is_same_v<size_t, decltype(hash<T>(declval<T &>()))> and is_same_v<size_t, decltype(hash<T>(declval<const T &>()))>
struct S {};
```
which is way above the `ColumnLimit: 80` (default for LLVM style).

It seems that the output changes a bit when `IndentWidth` is changed, but it still goes above the `ColumnLimit`:
```
BasedOnStyle: LLVM
BreakBeforeBinaryOperators: NonAssignment
IndentWidth: 4
```
results in:
```
template <typename T>
    requires is_default_constructible_v<hash<T>> and is_copy_constructible_v<hash<T>> and is_move_constructible_v<hash<T>> and is_copy_assignable_v<hash<T>> and is_move_assignable_v<hash<T>> and is_destructible_v<hash<T>> and is_swappable_v<hash<T>> and is_callable_v<hash<T>(T)> and is_same_v<size_t, decltype(hash<T>(declval<T>()))> and is_same_v<size_t, decltype(hash<T>(declval<T &>()))> and is_same_v<size_t, decltype(hash<T>(declval<const T &>()))>
struct S {};
```

There are other strange results:
```
BasedOnStyle: LLVM
BreakBeforeBinaryOperators: NonAssignment
ColumnLimit: 40
```
gives a requires clause on a single line too:
```
template <typename T>
  requires is_default_constructible_v<hash<T>> and is_copy_constructible_v<hash<T>> and is_move_constructible_v<hash<T>> and is_copy_assignable_v<hash<T>> and is_move_assignable_v<hash<T>> and is_destructible_v<hash<T>> and is_swappable_v<hash<T>> and is_callable_v<hash<T>(T)> and is_same_v<size_t, decltype(hash<T>(declval<T>()))> and is_same_v<size_t, decltype(hash<T>(declval<T &>()))> and is_same_v<size_t, decltype(hash<T>(declval<const T &>()))>
struct S {};
```

FYI, @HazardyKnusperkeks 

Expected code should respect the `ColumnLimit` of course.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJztV11z4yYU_TXyCxMPRpJlPfghzkebadp92Mx2-pRB4kpig0AFZNf763tB2cbJOFPvbtOneDC24HK4wD1H3MqI_foOnAdBdtJ3hJPGgutIrbhuzxpje-6xyfSk51KTynJdo5Untel76UnVVBlvAIqsXoklpNVCUEbzZVY1sFimtEgbWnCakYStGGXsjLIzliWsTNLzhF4m9DxZ0scSH59NvAXrpNFkkc_pnAaMVvoko1h3YzVHHxBGqW2fsOvwczZY8xlqP2-_wbXgzDFPpvonuQWNq9WNbF_zecMdiA_6o98rQBtye_vp18ceC_xhA7gc2EjN7f7DAJZ7Y12w-83oc-dkq3vQ_iiy7wDnFkCkI9OehJPy5jVPPPSD4h5Ikl74_QCa90DukvRq6ibEwp-jxBNGwHsBDR-Vv8fFOW_H2stKwf0Wh361fvbpuOuwL6KlV4RrEUBqM-yPIBw37s0WTjaOyDzuDz8B9iRLASdN7XZ8GP4FquZKHTVhq7sY309oeAjRyskvcO8TdkEE1CqcDxo_Hxo6tlw9NQSoqfwwIPJn-V-DxsMkr0BPYTTtOPlIkmKTFJdJujkaurtOorJgnO_4nvAKj5SE6Mf-C6PGXt9K1JvAmlUYQ6IXMX4DMSLliIsEZOX8kMA3njiA3iEaKkqANKMfRlSwDpUGmcBJhWqx65DmCHyjBZLxdyl8F6ZBfyY7ETakwmFo67xUirQmDH7NUVzW26vFobNokR2dD9mOu4SM19-tGqfqxrtEvEvEG0rEVN91YIFw_BrknUU22kBQ8hjn_wPtXghSRo9O2OLNIajLP9TBq83o0GuNjU7qVgFRUqN6mLd-n7_z8p2Xb87L6z9uwsx4Pf-Zf-FW7H_Ro0MmPcCDI4eGV38NeEfHe2y82brOjEoE9obW469SYho0Hq2D-UysU1GmJZ956RWsk3xzmDIk-SU5GBve39r4r-g4JyYxLwkZE59vEIHZaNW6836IWsOusRwkJFMm8iIhwUfp3AgO_-QZzYtZty7zFc1KkZaswtRolS1XXNBVQ5saGpGL5QxjFJQLK0wYq8YW67jBjD1bMbbmlzO5DukVloyWeb4o56LJ0kVRQM5oWfAixXMBzOHUPPg1N7ad2XV0EZEddirpvHvqnDgJcYMDPh99Z-y6fxitgM-zuJp1XMrf0o1vGg">