いいじまです。

「typedefで定義される型は、#if で演算に用いることはできない」
上記の命題はあっているでしょうか。

たとえば、こんなコードです。
        //---システムが用意するヘッダファイル
        typedef unsigned short wchar_t;

        //---それを #include するコード
        #if sizeof(wchar_t)==2
                #define UCS2 wchar_t;
                typedef uint_least32_t UCS4;
                //後略

これはプリプロセッサの段階でエラーになるのが正しいんですよね。

#そもそも char が 8 ビットということすら規格は保証していないので、
#sizeof(short)==2 なんて無意味なんですが。

で、wchar_t に関しては素直に WCHAR_MAX を見て判定するのが吉、と。

========================================================================
飯嶋 浩光 / でるもんた・いいじま   http://www.ht.sakura.ne.jp/~delmonta/
IIJIMA Hiromitsu, aka Delmonta           mailto:delmonta@ht.sakura.ne.jp