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

    <tr>
        <th>Summary</th>
        <td>
            clang-format incorrectly indents lambda trailing return when lambda has constexpr specifier or noexcept specifier without expression
        </td>
    </tr>

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

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

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

<pre>
    .clang-format:
```
BasedOnStyle: Google
```

Here is the formatted code when lambda doesn't have constexpr/noexcept specifier:
```c++
#include <type_traits>

void very_long_function_name_yes_it_is_really_long(...);

void do_something(...);

int main() {
 very_long_function_name_yes_it_is_really_long(
      [](auto n)
 -> std::enable_if_t<
 std::is_arithmetic<decltype(n)>::value &&
 !std::is_same<std::remove_cv_t<decltype(n)>, bool>::value> {
 do_something(n * 2);
      });
}
```

As expected trailing return arrow is indented 4 spaces after the lambda. But adding constexpr or noexcept specifier after lambda makes it 0 spaces:
```c++
#include <type_traits>

void very_long_function_name_yes_it_is_really_long(...);

void do_something(...);

int main() {
 very_long_function_name_yes_it_is_really_long(
      // also happens with constexpr specifier
      [](auto n) noexcept
      -> std::enable_if_t<
          std::is_arithmetic<decltype(n)>::value &&
 !std::is_same<std::remove_cv_t<decltype(n)>, bool>::value> {
 do_something(n * 2);
      });
}
```
Somewhat surprisingly, this issue doesn't happen when noexcept specifier with expression is used (e.g. `noexcept(true)`).

clang-format version: 17.0.6
OS: EndeavourOS Linux, kernel 6.9.3-arch1-1

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsVc2O4ygQfhpyKcXCkMT2wYf0T3YPK_WhH8AiULGZwWABTnfefoXtTSfTPaPd8w5CiQxVH6WvvqoSIejWItZk-0C2Tysxxs75WgpvvrnOBmcrvjo6dakzaYRt1yfnexEJ3xP6ROie7Oiyp88HEVC92Nd4MUj4Hv5wrjX4pen8-yd6BB0gdggzdEQF0imEtw4tGNEflQDlMFjCigidOCNIZ0PE98ETdrAO3yUOEcKAUp80-s_BScIe0p5PGddWmlEhEP4YLwM20QsdA-HPt6GdnVZwRn9pjLNtcxqtjNrZxooemwuGRsdGh8ajMGa2IazMsoywivCHT0jKNcH1GDv9c0NtI_RCW8JKwiogxXL7n8NY3KY1Z5awUozRgU2vzrdrwp8hRJX44nu04miw0acmEv64mFxvdWiE17HrMWpJ-KNCaRJ1hJUTIn-e7c7CjAiE7dKeMQjLb2GC6JHwx-uRx96dsZHn6d0vcNkjHJ0z90-k0D_o-YFbC4Ttgd3yu1BRPN2RXjz9Qpr7APg-oEyCTAIx2rbgMY7egvDevSXdaqvQJosNhEFIDCBOEf2k51m7GTyMEYRSyf0qXHAePit3cV5E34vvGEBHoAv2b2HfC5sdCDuAMMFBJ4YBbYA3Hbsblj96wi8L4pqKW7N_UR7X9f-sk1fX41snIoTRD14HbVtzSXHELpVGCCPede6UormtfyH9KXMpaRiCdjYV1xhQAWElZm0GZEevWWJl9COmEHeUsCq7ldrtmErySmBpFOVFRrOF65fXdPJsFYqzG_3LK_yl7fieQv-O3qKBXVZlfC287PJ1PjutVM1VxSuxwjov8oKXBaN01dXIGW6wYIqKitK8yo-yKEtUtGJ5sd3yla4ZZRu6o5xuKKU0k-W2VCdx2uaykjlDsqHYC20yY8595ny7msirq01e5isjjmjCNKEZu5vCjKWZ7evktj6ObSAbanSI4QMo6miwviNFW-m8RxnNZelf4Z-W82Ofu53BnQhfVdZPOllKpxvjTUZXozd1F-Mw9bGpdlsdu_GYSdcTdkghL3_rwbtvKCNhh4mIQNhh5uJcs78DAAD__yQFrjw">