Because b is an invalid unusable pointer, and if you used static_cast (reinterpret_cast is only for cases where you are willing to take full responsibility and know exactly what you are doing), the compiler would refuse.

There is also a FAQ board where this topic is currently the latest.