¿Por qué puedo usar static_cast con void * pero no con char *

Yo sé esoreinterpret_cast se usa principalmente yendo hacia o desde unchar*.

Pero me sorprendió descubrir questatic_cast podría hacer lo mismo con unvoid*. Por ejemplo:

auto foo "hello world"s;
auto temp = static_cast<void*>(&foo);
auto bar = static_cast<string*>(temp);

¿Qué ganamos al usarreinterpret_cast&nbsp;ychar*&nbsp;terminadostatic_cast&nbsp;yvoid*? ¿Tiene algo que ver con el estricto problema de alias?