Yes I'd bet big this technique is an often reinvented wheel.
Why do you prefer two static casts involving void * over a reinterpret cast? Also, your C style cast is really a reinterpret cast. I think the reason for having reinterpret cast is that it's a (greppable) warning that something is dangerous. And this technique is fairly dangerous, mistakes can elude static checking.