このページはC++23に採用された言語機能の変更を解説しています。
のちのC++規格でさらに変更される場合があるため関連項目を参照してください。
概要
C++23では、以下のプリプロセス時条件式が追加される:
#ifdefに対応する#elifである、#elifdefを追加。#if/#ifdef/#ifndefが偽だった場合の、特定の識別子(マクロ名)が定義されているかの判定を記述できる#ifndefに対応する#elifである、#elifndefを追加。#if/#ifdef/#ifndefが偽だった場合の、特定の識別子(マクロ名)が定義されていないかの判定を記述できる
これまでは#elifにおいて特定のマクロが定義されているかを調べるために#elif defined(macro_name) / #elif !defined(macro_name)と書く必要があり、#ifに対する#ifdef macro_name / #ifndef macro_nameのような短縮ディレクティブが用意されていなかったが、C++23からは#ifと#elifの両方でdef/ndef付きのディレクティブが利用できるようになる。
#define FOO 2
#if FOO == 1
/* */
#elif FOO == 2
/* */
#elifdef BAR
/* */
#elifndef HOGE
/* */
#endif
これらのプリプロセス命令はC23でも追加されるため、C++でも同じく追加する。