<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/57027>57027</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[clang-tidy] modernize-use-equals-default should not be applied when it changes semantics
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
jcelerier
</td>
</tr>
</table>
<pre>
https://clang.llvm.org/extra/clang-tidy/checks/modernize/use-equals-default.html
e.g. consider:
```cpp
struct Trivial { };
struct NonTrivial { ~NonTrivial() { } };
struct Container
{
private:
union U
{
Trivial a;
NonTrivial b;
U(): a{} { }
~U() { }
};
U u;
int index = 0;
public:
~Container()
{
if(index == 1)
u.b.~NonTrivial();
}
};
Container cont;
```
here, modernize-use-equals-default turns this code into `~U() = default;` which then does not compile due to the non-trivial dtor.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJx9VMuWojAQ_ZqwyZETQUQWLNq2Zzmr8QMSUkp6YsLk0Y_5-ilAEdqZyQEN9bj3VlFEWPlZtyF0nuRPJPuGV6O5Oadav11S685ogI_g-M2xCkp-9g8tND89bi5WgjPqN-A-eljBr8i1X0k48ahD2oaLJuxA2NP4C-k5pY01XmFazznzkS0br6brRosPLjaB_nDqTXFNSbnH-0Dy_cL93ZplxMvdQrIdyapb5iJ7gfFsTeDKgKNXZ3mNorRDJB5gEktxRaOsoce7YRbfr5sePrGN9plU8cU13x9H2UiJCIg8KB9rn2eUL8dlfXM9XwsdcGlE64xKmYC3hA9K8gNlDyldFFo1i9KRdWrWjf1fbUCCE8ZMDD3Jui9sEYPtTEX6l9e26NBU3mNp95eHkxXuzts8zWNbcDiqz3Sa29Xj1NIQnfE0tMojooS-TZb2QLOOYynX8J5wy-h7q5oWk8BQacFTYwNmXzqlgcoIFCHQiWazCtcZkMG6dNSVQL3ebhkrcrbeJrLOZZVXPAkqaKhJsZ99fcXh_-p9a6OWA78AyrtOK5AoD4UplNQiEMrzcOEmqMYn0ekvZ8BZhTaKFNXjQ38UXP9WnbOv0AR8VN5H6A-AomRZmbS1LDdZscuLvDyV6ybnsmLZVoiKrUWzYWKTaC5A-74WkmUG3ukAgXssKFF1xrKM7Vi1zgvsQFr2qyrErhRcZqeMbBgKVno6mRJXD5JEPHt0auWDvzu59-psYGhdj89jaK2rXxvQ4BS4ZCCvB_F_AHHecNs">