Microsoft VC2005 および g++ コンパイラの両方で、次の結果はエラーになります。
win32 VC2005 の場合: sizeof(wchar_t) は 2 です
wchar_t *foo = 0;
static_cast<unsigned short *>(foo);
結果は
error C2440: 'static_cast' : cannot convert from 'wchar_t *' to 'unsigned short *' ...
Mac OS X または Linux g++ の場合: sizeof(wchar_t) は 4
wchar_t *foo = 0;
static_cast<unsigned int *>(foo);
結果は
error: invalid static_cast from type 'wchar_t*' to type 'unsigned int*'
もちろん、いつでもreinterpret_castを使用できます。ただし、適切な整数型に static_cast することがコンパイラによって違法と見なされる理由を理解したいと思います。きっとちゃんとした理由があるのに…