<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/110485>110485</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Formatting breaks for a member function with both a reference qualifier and a trailing requires clause
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
cgnitash
</td>
</tr>
</table>
<pre>
From clang-format 19, member functions containing *both* a reference qualifier and a trailing requires clause, results in broken formatting until the closing brace of the following member function.
> cat test.cpp
```
template <int n> struct S
{
void f() & requires(n == 1) {}
// some comment
void g() {}
};
```
> clang-format-19 test.cpp
```
template <int n> struct S
{
void f() & requires(n == 1) {}
// some comment
void g()
{
}
};
```
Note the indentation of the `// some comment` and `void g()`, which is obviously incorrect. (Additional custom brace wrapping options are also ignored after the definition of `f`, but the above is just a simplified example without a custom .clang-format).
The expected output is what clang-format 18 gives:
> clang-format-18 test.cpp
```
template <int n> struct S
{
void f() &
requires(n == 1)
{
}
// some comment
void g() {}
};
```
This bug doesn't manifest when using explicit object parameters, so there *is* a workaround for now, but it would nice to avoid that change.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy0Vc1u2zgQfhr6MoggU45-Djok8fq4l-0LkNRIYkORKjm00rdfkLYbb9AWi91WMGB7OD_fp_k4I0LQk0Xs2eMzezzuRKTZ-V5NVpMI80664Wt_8m4BZYSdHkbnF0Gw7xh_gQUXiR7GaBVpZwMoZ0loq-0EjD9JRzPjTyDA44gerUL4EoXRo0YPwg4ggLzQJvl7_BK1x5DqxIApvccQDQXQFqR3r2jhUp2Sf7SkDdCMoIwLySK9UAhuzMbRGeO2ZP4AsmDlkZVPrPoDlCAgDFSodb1a6_L6yX8Jl9UIQmDVi7YENkUF8lER_HWNaJ4vP-Ds9AAj4y3jHTBef2PEeGuBVUdWHWGfD5tn1hyv8ZdgYPzE-AmCWxCUWxa0dDvKiadb4vvY5siq5-8iz_TuGvaw734h1f_JNT0_4Zuee87fXtF7_X_zCv50hFkK2g5oSaTm39SRnL4DoC6zKlld_qN-cn6BbdZqBh3AybN2MZivoK1y3qOiAhhvn4ZBpyLCgIqB3HJV5ObFuiYluvVyS4RHECY40JN1HgcQI6HPwAYctdU3qKwux2t1GSk7COnOmFB8joFAQNDLmi_UAPgmltUgbJpmF9PhFUZxrwTGu-K-HZ9mBHxbUREO4CKtkVL6bRb04cq3MOkzBlY9_Uhj7e_U2M3-I6n9VCa_55Z9mnUAGScYHAbLeEOwCKtHDATbjBZiHkz4thqtNIGTn1ERrMKLBQl9SJ0NLjXWY5qYOlzm5eb8q_Au2iGNPLBuu2lAE2wumgGsVgjkQGTglNs1CzthsRv6auiqTuyw3ze8qTve7Nvd3I817_Y4HqqqOfBSlPJQVw3nrezqTj6WYqd7XvJD2VXlvqzaqi1wqKpaqlo2Y4Ml79ihxEVoUxhzXgrnp50OIWK_35eH9nFnhEQT8irh3OIG-ZRxnjaL71PQg4xTYIfS6EDhPQ1pMtif3se79CheQ2YvPo7wrHBI2-U_rZZd9KafidYs5ayISdMcZaHcwvgpgbp-PazepZYxfspUAuOnK9dzz_8OAAD__9thNqQ">