C で #define を使用してキーワードを再定義できますか?
私はC++標準でこれを見つけました:
ISO/IEC 14882:1998 および ISO/IEC 14882:2003
17.4.3.1.1 マクロ名 [lib.macro.names]
2 ヘッダーを含む翻訳単位には、そのヘッダーで宣言または定義された名前を定義するマクロを含めてはなりません。また、そのような翻訳単位は、語彙的にキーワードと同一の名前のマクロを定義してはなりません。
164) #undef ディレクティブを使用してライブラリ マクロ定義を削除することは許可されていません。
ISO/IEC 14882:2011
17.6.4.3.1 マクロ名 [macro.names]
2 翻訳単位は、キーワード、表 3 にリストされている識別子、または 7.6 で説明されている属性トークンと字句的に同一の #define または #undef 名を使用してはなりません。
つまり、C++98 / C++03 では、標準 C++ ライブラリのヘッダー ファイルをインクルードするとキーワードを再定義できませんが、C++11 ではどの翻訳単位でも再定義できませんよね?