「0xe-0xeはゼロという迷信」は本当なの?
単に GCC のバグじゃないのかなー。そもそも、
- 手元の規格 *1 だと、pp-number に 'x' は含まれない
- だから '0xe-0xe' は pp-number として評価されないはず
- BNF を見ると pp-number は #if とかプリプロセッサディレクティブ内にしか出現しない
- だから if 文の中にある '0xe-0xe' は pp-number じゃない
んじゃないか。実際に、gcc -E - することで、プリプロセッサがエラーを吐いているわけじゃないことがわかる。そして '0x' から始まるのは hexadecimal-literal で指数表現はできないことになってる。
結論:gcc のバグだと思う。