title: Why do I need a reinterpret_cast to convert Fred ** const to void ** const?
body: <p>I have a const pointer to a pointer to a <code>Fred</code> and I don't understand why a <code>static_cast</code> isn't sufficient. </p>
  
  <pre><code>typedef struct {
      int n;
  } Fred;
  
  Fred *pFred;
  Fred **const ppFred = &amp;pFred;
  void **const ppVoid = static_cast&lt;void ** const&gt;(ppFred);
  </code></pre>
  
  <p>Please could someone explain why a <code>reinterpret_cast</code> is needed to convert a pointer to <code>Fred*</code>to a pointer to <code>void*</code> but <code>static_cast</code> is fine to convert pointer to <code>Fred</code> to a pointer to <code>void</code>.</p>