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

    <tr>
        <th>Summary</th>
        <td>
            Clang does not realize inaccessible user-defined `operator delete` until it is called
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            clang
      </td>
    </tr>

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

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

<pre>
    Consider the following code:

```c++
class QCachedT
{
  static void operator delete(void *, int) {}
};

int main() {
     auto a = new QCachedT;
 //QCachedT::operator delete(a, 10);     
}
```

It appears that clang does not complain about anything about the private `operator delete` of `QcacheT` when it is dynamically instantiated. Only when the operator is explicitly called will the compiler reject the code. However, there is no need to do so in GCC, EDG, and MSVC:

https://godbolt.org/z/rvs1bjavh

Considering that clang will also reject the code without explicit calling of `operator delete` when it defaults, it seems to be more like a bug of clang:

```c++
class QCachedT
{
  static void operator delete(void *){} 
};

int main() {
 auto a = new QCachedT; 
}
```

https://godbolt.org/z/8oso11haf




</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJy0VE2Po0YQ_TXNpTQWNMY2Bw4eO97kEEWrrHIv6MLUpt2Nugs73l8fNXh2JpOMkkukkhBFfbz3eN0YI58dUaOqZ1UdM5xk8KG5oTu3vqiy1pt7c_AusqEAMhD03lp_Y3eGzhtS5V7lc2zyJTqln1Pk-85ijPD5gN1A5kuq2aY0QBQU7uDq2YAfKaD4AIYsCSm9m9NK75U-ADtRuobUuD3OE46qfF42shO4IDuldy81aTgA4CQeEFR5BEe3VwRzJyh9Uvr0mtyrcv93FJjWF7nStSqf56mP9W-oLjh-EsBxJAwRZECBzqI7g_EUwXmBzl9Gi-wAWz8JoLvLkNRbXpOiY-ArCoHa5O9xbHLwffrwuUtwv6TEbSAHLMARzN3hhTu09g7soqATRiGzgl-cvS-VacP3sRyB_hgtdyz2DqmRDNzY2rksQWVLAQJ9pU4eOUMr-NHf6EohaSIDBUqDnAdHZEA8GA_RAzv4dDikmh-On9IDnYGff_3t8N0kg8gY09v8C87etN7Kyoez0qdvSp_CNRbtV7wOS_mL75Jcb6Sd8aKN_j1OuLEMSdUXjjPD1L2I-A_qvohpqMfJSpxNJxCJLjExawkuPhBY_p0AoZ3mWTOO_9X69WJ5-E-e_9jvH5r23_7EzkdfFAP2D4pzZKYpTV3WmFFTbMuqrquiXmdDY8p1XezqfofYbszO5IRbartd3rfbvNZ9xo3OdZUX-brQVVmsV0WV13VvNpqo1n1RqXVOF2S7svZ6STgyjnGiptDFZl1lFluycb6ktF7U1zrdV6FJDU_tdI5qnVuOEl9HCIul5vDX8xgILX8jYIddRzFyawmmSOHJUM-OzAdOmZywfZy75eBkU7DNOyFZhqlddf6i9CnheDyexuCTVZU-zbyi0qcHtWuj_wwAAP__1Ky7vg">