<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=http://email.email.llvm.org/c/eJzFV9tu4zYQ_Rr5hYjhyEkcPfghayNogO0FSNHXBSVRFrcUKZCUvf77niGtWL7Ezna3qCFYlDicGZ6ZORzlptzOf5FJukgmy2TyFP9fknS2FkwbLwtRMmcawaQujHbSeaELKRzbSF-z5GHypORKLzAlis7LtXhyDi8aob3DLPM19-yFbUynSpYLVvO23TJvmLfhxsvSCudYs3VCVfCDcce4hjnnbVeQRvbVdFaLLUvSxxcoWAsN_zyDP97KvPNwEZo-f_7r1yR9LhTXq5vK2AaGc4GBIK252BoND7oVs6I1Ft6l2c5cKyz8FKy1pjWOKwgrsyFz0LfmVnIvsUFmKib9bpmssEQ6hovgwVivgoD2Ahvy5FElv42HsCbpFBf7M5rKlWhOZ0ngZQ-1Z040XCMO7kD2Ku6AWVGYEENmtIpY70UAhGdcOUPvxTfIFtKr7U0pKt4pQpR2f_8puV_gvyzUuCr8GLPjnUSYWNKVPtbety6ZYgfPuLxsnEEIirYdr5AkXT6WhgLTtpsWd333-EDAnlNK2GYIf8lKocRlN2j-Z3sRdEYnqk4XFHZ4UkktQwZQ4De1LGrGbSgP9mWA6ZfxUYjiBYt9gMkxdilw0yf2m9EiyscCYK-71bNPccDwew25mbFkumQ9dtOj-VcqEAdMH65KBpmBWIBhKLU2smTVgdEDmWS23I_Df1xhzPtreomc2wuKexR_DNTBTFzWA9j_zsHzMRCPABxoO9zIYM-97XdBuYT0ESCXqCOSoAczRTEinp5ODvh8SzTG7arjOZgCyd7K4m9aRsQJotjUQrONILIGHuBvVChQN5Y1Bvy8rwFmwKXcG-tI3HluicAEcWM4RDoNrhEFFXYuwOTS2FhT4EyiLJSV9kRW8FSJyjcGTEqbnS4DqTUo6TDpNwY7CMMz1gc1SzvrnAj0RzkC5hU408ijJE0H1YunHeO_kdFzT0J40x8XwVWcGWTZylV97GI0V77ZCxR2bCccipVROGUCY_0E2ngqrHFuYZr45qMEciH9z7DDO7kdXkcv3xTOFpBc3NwAbxkCgnPZ7s7RGAggtA8xlMJUHz_CEnAP3XhgB5MfZ7eThVfJ7mgrJzuKgaMMOr-rQVrA4nkOPSKe7yPT88v-FZ8O-5I_du3PQSe4a4pEzNnrfYerQ6dHZyOvKpR6xCWWZ3W-1Rie9-8duyRDPaHgdPfWlF2B2mdabMAzWyUQ5hgHsF5szajsC-5C--d4JBUgQ7ca6qpOBZBOt7TsPfvdLqNby4EzwK5vA3aEoHfdVhmew_7RAkIDPL1a3h8v0oNs_HjBni47yfj_qL4umTxfDf9rSYzK-bTMphkf8c7Xxs7LCp8Xo86q-WFvuesnC9PgQal1f7tBrXxFyuNROtcJJO7z_XR2-ziq53wyK3k1y2dCVFXKJxm_L2d3WVVmj7dFXvCR4vjqcHNqdtOUsjqowBjd7ejHPZDzdJLiup3czibZJBuXWZEVs7y4S7OMV493yd0ErYFUY9IzNnY1svOgEp9MDpMKrYLbT8YTTYjgMDz0qOnwMPz-wgRbmkgGgR2vlv-g6tla8munHjUkpxwQKED6UYBgHvb_Dz28iRA>53718</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [clang-format] Do not align explicitly-defaulted and deleted definitions via AlignConsecutiveAssignments: add a new style option for it
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

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

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

<pre>
    Hi,

I've noticed some inconsistencies with `AlignConsecutiveAssignments` that I would be happy to try to address myself, as an instructive journey (I haven't contributed to LLVM/clang-format before, beyond bug reports), as per the proposal below (/variations of it), if this is something of interest to fix.

## The problem

### Inconsistent semantics

`AlignConsecutiveAssignments` applies not only to assignments but also to explicitly-defaulted ([\[dcl.fct.def.default\]](https://timsong-cpp.github.io/cppwp/n4868/dcl.fct.def.default)) and deleted ([\[dcl.fct.def.delete\]](https://timsong-cpp.github.io/cppwp/n4868/dcl.fct.def.delete)) function definitions, which are not _assignments_.

```cpp
// AlignConsecutiveAssignments: None
struct S
{
    S() = default;
    S(S const&) = default;
    S(S&&) = delete;
    void f() = delete;
};

void foo() = delete;
void foobar() = delete;
```
```cpp
// AlignConsecutiveAssignments: Consecutive
S()         = default;
S(S const&) = default;
S(S&&)      = delete;

void f()  = delete;
void ff() = delete;
```

### Inconsistent formatting
The semantic inconsistency is arguably nitpicking, but when we add copy and/or move assignment operators we start seeing some unexpected behavior, where apparently the leftmost `=` among the two in the assignment operator definition is use to align preceding "assignments" (/default/deleted defs), whereas the rightmost `=` is used to aligned "assignments" that follows:

```cpp
// AlignConsecutiveAssignments: AcrossComments
struct S
{
    S()        = default;
    S(S&&)     = delete;
    //         | <-- prior declarations align to leftmost = (operator=)
    S& operator=(S const&) = default;
    S& operator=(S&&) = delete;
    //                | <-- following declarations align to rightmost =
    void f()          = delete;
};

void foo()    = delete;
void foobar() = delete;
```

## Proposal

I propose that `AlignConsecutiveAssignments` should not affect alignment of explicitly-defaulted and deleted function definitions, and instead introduce a new style options for this use case, say the (the handful) `AlignConsecutiveDefaultedOrDeletedDefinitions`, which, when applied, would result in:

```cpp
struct S
{
    S()                    = default;
    S(S&&)                 = delete;
    S& operator=(S const&) = default;
    S& operator=(S&&)      = delete;
    void f()               = delete;
};

void foo()    = delete;
void foobar() = delete;
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzFV9uO4jgQ_ZrwYjVKh1vzwEMPqLUtzV6kWe3ryHEc8GxiR7YDw9_vKZs04dLQuzurRREJcbkup6qOi9wU-8VPKsmWSbpK0uf4_Zpks61k2nglZMGcqSVTWhjtlPNSCyUd2ym_Yck0fa7UWi-xJEXr1VY-O4cXtdTeYZX5Dffsle1MWxUsl2zDm2bPvGHehhsvCiudY_XeyaqEH4w7xjXMOW9bQRrZN9NaLfcsyZ5eoWArNfzzDP54q_LWw0Vo-vz5j5-T7EVUXK8fSmNrGM4lHiRpzeXeaHjQrpmVjbHwLpsfzDXSwk_JGmsa43gF4crsyBz0bblV3CsEyEzJlD9sUyW2KMdwETx41usgoL1EQJ48KtX3YR_WJBvhYr9HU3kl68tVEng9Qu2ZkzXXyIM7kb2LO2CuKE3IITO6ilgfRQCEZ7xyht7L75AVylf7h0KWvK0IUYp-8imZLPFdiGpYCj_E6vAgERZWdGVPG-8bl4wQwQsur2pnkALRNMM1iqTNh8pQYppm1-Cux09TAvaaUsJ2jvQXrJCVvO0Grf9oL4LO6ETZakFphyel0ipUACV-t1Fiw7gN7cG-9jD9OjxLUbxgsUswOcZuJW70zH4xWkb52ADsy2H37FN8YPh8CbU5Z8loxTrsRmfrX6hBHDCd3pUMMj2xAENfamtUwcoToycyyWx1fA7fcYcx7-_pJHJubyjuUPx3oPZW4rYOwO5zDZ6PgXgGYE_baSC9mDvb74JyC-kzQG5RRyRBD2aKYkQ8HZ2c8PmeaIzbdctzMAWKvVHiT9pGxAmi2G2kZjtJZA08wN_oUKBuLKsN-PnYA8yAS7k31pG489wSgUnixnCItBpcIwU1di7B5MrY2FPgTKIstJX2RFbwtJKlrw2YlIIdrQKp1WjpsOh3BhGExyvWez1LkbVOBvqjGgHzSpxp5FGSZb3uxa8D47-R0UtHQnjTHRfBVZwZZNmq9ebcxWiueLMXKOzcTjgUS1PhlAmM9QNo41lY49zS1PHNRwnkRvlfYYd3aju8jl6-KZwtIbl8eADeKiQE57I9nKMxEUDomGIohakuf4Ql4O67MWUnix9nt4uNd8nuLJSLiGLiqIKuR9UrC1i8zqFnxPP3yPT6tn_Ep_255LfD-HMyCR6GIhlr9v7c4TZh0qOzkZclWj3iEtuzvD5q9M_7945dkqGZUHK6e2uKVqD3mZY78My-kkhzzANYL45m1PaCuzD-OR5JBcjQbQN1ZVsFkC5DWnWe_WpX0a1Vzxlg140BB0LQh2mrCL9D_BgBoQGe3m3vjzfpSTV-vGEvt11U_H_UX7dMXu-G_7UlBsViVMxHcz7wKFC5wMTZ_zOBKZOtTKzs0Op3a7lXwmyr-D0Kp9P1sqBDPSs_aG21OB1xD2OtMDV-VNW2uz2gZb-h8_BTOddK9M_LZDR7fBpsFuVMpI_pdJKPcz6epFJO8jKdpeORfBSTTEwHFcefH0ex46AiX4IKPCP8gVpkaYbrMX2cpfN0PizmYi5muRhn8zkvn8bJOMV8oaoh-TE0dj2wi-AS_nc5LFaYN9xxMR6LMkBN-nnrN8YuihJ_6wbB8CI4_hdZu3Jd">