Limitations of reinterpret_cast

Limitations of reinterpret_cast

A reader tried to cast a nonstatic member function of a certain class to void*, as in the following example:

 class A{public: void func();};void *pmf = reinterpret_cast  (&A::func); // error

However, the compiler refused to accept this code. Why was the casting of a pointer to member to void * impossible, even with reinterpret_cast? This is not a compiler’s whim. A pointer to member function cannot be converted to void * because the former is not a real pointer. Rather, in most cases it’s a data structure that contains offsets and addresses that enable the implementation to access a function of a given object. Casting it to void * is technically impossible and therefore not allowed.


Share the Post: