I am little confused with the applicability of reinterpret_cast vs static_cast. From what I have read the general rules are to use static cast when
reinterpret_cast
static_cast
Read the FAQ! Holding C++ data in C can be risky.
In C++, a pointer to an object can be converted to void * without any casts. But it's not true the other way round. You'd need a static_cast to get the original pointer back.
void *