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

    <tr>
        <th>Summary</th>
        <td>
            Defaulting comparison operator with explicit object parameter
        </td>
    </tr>

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

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

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

<pre>
    The following two defaulted equality comparison operators with explicit object parameter
```
struct A { 
    // #1 valid but rejected in Clang
    //bool operator ==(this A, A) = default;

    // #2 invalid but accepted in Clang
    bool operator ==(this const A, const A &) = default;
};
```
are processed incorrectly by Clang. 1 is valid but rejected in Clang. 2 is invalid but accepted in Clang. Online demo: https://gcc.godbolt.org/z/MxMnK187c

Related discussion: https://stackoverflow.com/q/78808689/7325599
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyEU81u2zgQfhrqMohADfV70MGJocsiWGCxL0CRY4m7tKiQlB336QvabtOmaQoQ0ojizPdDfDIEMy1EPaseWbXP5BZn5_uBtM9Gpy_9vzPBwVnrzmaZIJ4daDrIzUbSQC-btCZeQLnjKr0JbgG3kpfR-QBnE2eg19UaZSK48T9SEVbp5ZEiecb3jO9Yze_r-hmi31SEHbDmEW5bAAAMB4YDMBQFnKQ1GsYtgqc0kTSYBZ6sXKb3DaNz9jsfYGKfFrZxNgF2DJ_So0v73yQx8Xin9QE0glnewKVStH4M_hmsckuIN_B7CQzr39Jo9m_1z05JT7B6pyiEKwnlvCcV7QXGy41QDgWY8JlfOWA68amsHP5erFkINB0dEzuYY1wDE7ubMZNS-eT06GzMnZ8YDl8YDs-vz8tfRduoH938h6xMk7UJagvBuOXXcSFK9b87kT9Yd86VOzIcXhgOTdvytm67VAqsqq7LdC90JzqZUV80iEIIXjbZ3NfqIJpDUyKnpuioLVtR1HIsCllWWLVjZnrkWPJGcN5VvGxyLQ-tFm1VC16XWoys5HSUxubWno5JVWZC2KgveFHUPLNyJBuueUFc6AzXvwwxxcf3qelh3KbASm5NiOFtTDTRUr-_XXJK0wex-UNqss3b_t0VmDhv492shHV_PazepWaGw5VhYDjcJZx6_BoAAP__BRs8zQ">