<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/90021>90021</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[Clang] A trivial but `noexcept(false)` destructor is incorrectly considered non-throwing
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clang
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
frederick-vs-ja
</td>
</tr>
</table>
<pre>
Currently, Clang incorrectly accepts the following code snippet, which conflicts with [[except.spec]/6.2](https://eel.is/c++draft/except.spec#6.2).
```C++
struct TrivialButPotentiallyThrowingDestructor {
TrivialButPotentiallyThrowingDestructor() = default;
~TrivialButPotentiallyThrowingDestructor() noexcept(false) = default;
};
static_assert(noexcept(TrivialButPotentiallyThrowingDestructor{}), "???");
```
It's curious that other compilers also get this wrong ([Godbolt link](https://godbolt.org/z/b3oxaosjP)). #70545 may be related.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJyUU02P4zYM_TX0hYihyB-xDz5MxnDR2x72XsgSbWtWsQKJntn00N9eyMki02ILbAHBFiS9Rz6ST8Vo55Wog-oMVZ-pjRcfuimQoWD1t8N7PLypbPTm1r1uIdDK7gbyFV-dWme0q_YhkGZ3Q6U1XTkiL4STd85_2HVG7Q1hXO31SpxwH4vVC2q_Ts5qjvhhecE9-Jm-J4I8XklD1YMc6lzum2ZhvkYoXkAOIAcil9sIctAgzyDPJqiJ0_knvCwSWLY5iB7Ey-Nbi_t6vQPvp5HDphm_BvtulTtv_MUzrWyVc7evS9hl9HR_5QPC6YH7VQTIBmSLUPRoaFKbYyh-UPz1_zhWf9cIspmUi_RfvHDqn_uHSMVW_6FipJDgn5h-NYXTOdHKNnURpIRieCyZCv2M96PIn8P_ziBPEfUWrN_SiChGzwsF1P5ytY5CROWix5kYebERP4JfZ0y6q_Nv3ozeMTq7fvvZQMz3-9yHGeTwJ8hhLPx35ePblz3fNkeQxUlUZYUXdcORMJBTTCbPTFeYtmhVRt3xdCyFrNqmzpZuFMKUbUPN2LRVUxdCFUpPTVGfSlXR0WS2k0KWopSVqI9tWefNWByNNoUgqkc9HaEUdFHW5c69X1JumY1xo64VQh4zp0ZycbedlDqZKdWx6rPQpfeHcZsjlMLZyPHJwJbd7tXdflD1-IJ87x-OGyPU4iczArVA85xgG__hW-3XaA0FMrj69cCPzmdbcN2_6mx52cZc-wvIIeX0-B2uwb-RTh7cJSZv7ir_DgAA___CZ2Zq">