title: How does C++ compiler work when compiling `operator delete`?
body: <p>I notice that the declaration of  <code>delete</code> in the directory of gcc source <code>gcc/libstdc++-v3/libsupc++/new</code>is </p>
  
  <pre><code>    void operator delete(void*)
      void operator delete[](void*)
  </code></pre>
  
  <p>Why can we pass <code>const ptr</code> to the operator?</p>
  
  <pre><code>    const int* a = new int(1);
      delete(a);
  </code></pre>
  
  <p>I think <code>void*</code> and <code>const int*</code> are incompatible types.</p>