Why can I use static_cast With void* but not With char*
<p>I know that <a href="http://en.cppreference.com/w/cpp/language/reinterpret_cast" rel="nofollow"><code>reinterpret_cast</code></a> is primarily used going to or from a <code>char*</code>.</p>

<p>But I was surprised to find that <a href="http://en.cppreference.com/w/cpp/language/static_cast" rel="nofollow"><code>static_cast</code></a> could do the same with a <code>void*</code>. For example:</p>

<pre><code>auto foo "hello world"s;
auto temp = static_cast&lt;void*&gt;(&amp;foo);
auto bar = static_cast&lt;string*&gt;(temp);
</code></pre>

<p>What do we gain from using <code>reinterpret_cast</code> and <code>char*</code> over <code>static_cast</code> and <code>void*</code>? Is it something to do with the strict aliasing problem?</p>