次のコードがコンパイルされるのはなぜですか?
#ifdef C++11
// ...
#endif
int main() {}
gcc 4.8.0 では、次の警告が表示されます。
#ifdef ディレクティブの末尾に追加のトークン
標準によると、マクロ名には文字、数字、およびアンダースコア文字のみを含めることができます。
もしかしてこれのせい?
ISO/IEC 14882:2011
16.1 条件付き包含 [cpp.cond]
6 各ディレクティブの条件が順番にチェックされます。false (ゼロ) と評価された場合、それが制御するグループはスキップされます。ディレクティブは、ネストされた条件のレベルを追跡するためにディレクティブを決定する名前によってのみ処理されます。グループ内の他の前処理トークンと同様に、残りのディレクティブの前処理トークンは無視されます。制御条件が true (ゼロ以外) と評価される最初のグループのみが処理されます。どの条件も true と評価されず、#else ディレクティブがある場合、#else によって制御されるグループが処理されます。#else ディレクティブがない場合、#endif までのすべてのグループがスキップされます.151
この引用を正しく理解できません。