<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/142818>142818</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
clang-format not respecting RequiresClausePosition with trailing-return-type
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang-format
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
brevzin
</td>
</tr>
</table>
<pre>
This source file:
```cpp
template <class T, class P>
struct Pointer {
P pointer_ = P();
auto operator*() const -> auto& requires (not std::is_array_v<T>) { return *pointer_; }
auto operator->() const -> auto* requires (not std::is_array_v<T>) { return std::to_address(pointer_); }
};
```
with this .clang-format:
```
BasedOnStyle: LLVM
AccessModifierOffset: -4
AlignAfterOpenBracket: DontAlign
AlignConsecutiveAssignments: None
AlignConsecutiveBitFields: Consecutive
AlignEscapedNewlines: Right
AlignOperands: AlignAfterOperator
AlignTrailingComments: true
AllowBreakBeforeNoexceptSpecifier: OnlyWithParen
AllowAllArgumentsOnNextLine: true
AllowAllParametersOfDeclarationOnNextLine: false
AllowShortFunctionsOnASingleLine: Inline
AllowShortCaseLabelsOnASingleLine: true
AllowShortLambdasOnASingleLine: All
AlwaysBreakTemplateDeclarations: true
BreakBeforeBraces: Custom
BraceWrapping:
AfterClass: false
BeforeElse: true
BeforeCatch: true
BinPackArguments: false
BinPackParameters: false
BreakBeforeBinaryOperators: NonAssignment
BreakConstructorInitializers: BeforeComma
BreakBeforeConceptDeclarations: true
BreakInheritanceList: BeforeComma
EmptyLineAfterAccessModifier: Never
EmptyLineBeforeAccessModifier: Always
IndentWidth: 4
IndentWrappedFunctionNames: false
IndentRequires: true
InsertBraces: true
KeepEmptyLinesAtTheStartOfBlocks: false
MaxEmptyLinesToKeep: 1
PackConstructorInitializers: NextLine
PenaltyBreakAssignment: 20
PenaltyBreakBeforeFirstCallParameter: 175
ContinuationIndentWidth: 4
RequiresClausePosition: OwnLine
PointerAlignment: Left
QualifierAlignment: Custom
QualifierOrder: ['static', 'inline', 'constexpr', 'type', 'const', 'volatile']
Standard: c++20
SpacesInAngles: Never
SpaceBeforeParens: Custom
SpaceBeforeParensOptions:
AfterRequiresInClause: true
AfterRequiresInExpression: true
SpacesBeforeTrailingComments: 2
IndentPPDirectives: AfterHash
PPIndentWidth: 2
ColumnLimit: 100
```
formats as
```cpp
template <class T, class P>
struct Pointer {
P pointer_ = P();
auto operator*() const -> auto&
requires (not std::is_array_v<T>)
{
return *pointer_;
}
auto operator->() const
-> auto* requires (not std::is_array_v<T>) { return std::to_address(pointer_); }
};
```
I would expect the `operator->()` to be formatted the same way as the `operator*()` immediately before it. Here, it's not even respecting the `RequiresClausePosition: OwnLine` parameter.
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJzMV01z4jgQ_TXioiLlyHweOBgSaqhlAjtJ7RxTQm5AG1nySm0S5tdvSbLBEGr24zSpVILVr1vt91rdgjsndxpgQvpT0n_o8Ar3xk42Fg4_pO5sTH6cvOylo85UVgDdSgUkzUiSkUESf0VZkiRDKErFEShJZ0Jx5-gLYTMaP65J-kiSzKGtBNK1kRrBUjKckiSjlNI1LePaKyXpA10TNiJsTFJvryG8QkNNCZajsYRlEUKF0Q5pl6SPAUHYgFr4q5IWHCVspA1Sh7nPOM2ke-XW8uPrgaSzF58SG_skqAWsrKaEZU0aJJ1SMny4tXc3ON7ePPv_m5-AaF55nltwjrDRKZ_ARp2S_xupaSQgSfYucU_RK3UnFNe77tbYguOVViTJptxBvtLPeAxK0uXyj68kyTIhwLmvJpdbCXa13TrwzrTb80YldzrbIthVCXpquXiL1gejMRgb0MxoB6JCeYAslFYBGp2HPhkNN1BTiXMJKg-Y1noDfXSCl5A_wbuSGgLqm9ztsbGvvCw6ul-kGQulRr1YLpXUu5kpTgmhreIuyrxPLfC3KWyNhScDHwJKfC5BBC48dqXV8bvE_Zpb0I1TplRmd1UIuNJP8IFLqeE6dKbUmlteAIJ1q-0DCMUtR2n0pc-WK3dyet4bi_NKC49zK509S71T0GAX2pNxAZ5xB0u-AfUZ3c4mYJe82OT8MzBTKuDe-dEFRl7qQ91Kuk1dizVfE1GdWeXQFMHKBXy3vCyl3sU6pJQGeWa-K7RfmsYoj_7pHJ_Sen3GUezbG0u95uLtxH47VG07c35hbGUsNbfHplCaEj0XbYP2NRn6lrELLVFyJX_UUevkTFHwy9gzo30J_Yy2hd6Dlci1gKV0-DncY1Hi0SsTGLs8niFZOIBt46L7Z2DUkyTZQueg8bvMMXDZOy95kSBv6u2JF3DBWkR9q1tb600W2oHFs_b18m8A5Sktl-HLHp6RW1xtp8qIt4vYX_nHGfpivKs335Mk8zL-hP3T4UmyNWiu8BiIbSmYZpQlV-bI0lxahzPeOpph02GfJNnMaJS6CrLdoKyhYaZ45WBtnPTA0CTedZNPbNuh9TSZLGHra-r3iqsgzYXxdGhO5pXNY1J-MLOhQ45SEDb0Q5WwoYwd4PQcRhF8lPa8hMfyGnB-PBjF0c9yNiR9P1SekeucWz-EqCBsStg0cPdcenEXOvONwrULL1ginaEtXp7-T9ZV2ZwDf7JDUTdULnQk8-LoXyEeP0o_E2uqa1RMLu5yq8WzU_Gu1w_SgvCTJY4KH_0Ld3uv1vpKZhavHTOjqkIvZSGDRvdJcjVK44h1lLtf-D5U4_3Pf7qc1H7npGKEGzelE_Jf3Zda0X6Nm9OCvptK5RQ-ShBIcQ-UDJLP6ZNBQtHQDdCoO0IewI4XQN_5kXJ37XzSxfvKooBccgR1pJtQslTiHf0CFnxlSH86HfWvDgfQ1ILz-Ui9a6L-c-cZJLRsGtod7eSTNB-nY96Byf2wN076wzQZdvaTQX806ucJA56MGRv1R_lonPf5WIhxOh71hh05YQnrJ4Okdz-87yfDO8aGIzbe9vPeYLzppYz0Eii4VHdKHYo7Y3cd6VwFk_seG92POipcRMJ3CsYurqOM-W8ZduL9uptq50gvUdKhO0dCiQomba9ASouP20TQeAWu20A3VkfXd8FOZdVkj1iG7sPmhM13EvfV5k6YgrC537r-1y2t-RMEEjYPb-QIm9cvdZiwvwMAAP__VXtTdA">